forked from luck/tmp_suning_uos_patched
media updates for v5.10-rc1
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEE+QmuaPwR3wnBdVwACF8+vY7k4RUFAl+EO5YACgkQCF8+vY7k 4RXLKw/9E0f2Ixw4Z3ZA0RINeHo5KGUpp4fnY5EGLX2wc/qe/YbfD9p3P2kpbBUo vatL7+SOD3kWyGXM2xDQVjpFb4/kRZzCMBKXDm0VVpU4I6guhfPJ8uv4x+B87FYx TVtlTfEtxCa4w/4zkjOm88HWfui/PNA7kmlivLwkQQf5qRwcUCJHVesL7H8eEw8Q Jzij7bI9Y0cLFAfc6aObphk0SPgJy7KQzX2TeKoXuxJcT4XWc9bXkyCu8K1I08n7 ZcKe/GQLWzQctUa7ipNMei7xhoHYJdrjnMukRMwsbzrCEUkcJ9bzEUZJRsyWYtao fc/XueBVWjF2i16r6xcX+lQr0uA6Iyg9UiqUi5OeMgCr6vokzND2QphwAaydWujE 1pq75cxK9J2LWycfvot2MPNuoMhX4UNqnbDvyl5cRWA7KoCMluS+rZKJMg7LqqVx z9x23crFgmEpiME4+vIsBTeKNG6uKU0WDW4J/vbr43V7VG6xs6Ito/40kNdlZWgP EHroca/NK5KE9QizFZVSN5uVO++7Zgwhaw6zoyfTTgh8ACPRjdMNBG0IaVgczcZA GqklJTUMKEvmgRKaOG//acuOaAZegHPj8DwKT/4b9sa2pDPVB1Sui7W7q5rMET6l iYsGb83x087nmtdloJ63m5kiSEzYUhiL03sNs7+gZGj58wESOmo= =bQuH -----END PGP SIGNATURE----- Merge tag 'media/v5.10-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media Pull media updates from Mauro Carvalho Chehab: - the usbvision driver was dropped from staging - the Zoran driver were re-added at staging. It gained lots of improvements, and was converted to use videobuf2 API - a new virtual driver (vidtv) was added in order to allow testing the digital TV framework and APIs - the media uAPI documentation gained a glossary with commonly used terms, helping to simplify some parts of the docs - more cleanups at the atomisp driver - Mediatek VPU gained support for MT8183 - added support for codecs with supports doing colorspace conversion (CSC) - support for CSC API was added at vivid and rksip1 drivers - added a helper core support and uAPI for better supporting H.264 codecs - added support for Renesas R8A774E1 - use the new SPDX GFDL-1.1-no-invariants-or-later license on media uAPI docs, instead of a license text - Venus driver has gained VP9 codec support - lots of other cleanups and driver improvements * tag 'media/v5.10-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (555 commits) media: dvb-frontends/drxk_hard.c: fix uninitialized variable warning media: tvp7002: fix uninitialized variable warning media: s5k5baf: drop 'data' field in struct s5k5baf_fw media: dt-bindings: media: venus: Add an optional power domain for perf voting media: rcar-vin: rcar-dma: Fix setting VNIS_REG for RAW8 formats media: staging: rkisp1: uapi: Do not use BIT() macro media: v4l2-mem2mem: Fix spurious v4l2_m2m_buf_done media: usbtv: Fix refcounting mixup media: zoran.rst: place it at the right place this time media: add Zoran cardlist media: admin-guide: update cardlists media: siano: rename a duplicated card string media: zoran: move documentation file to the right place media: atomisp: fixes build breakage for ISP2400 due to a cleanup media: zoran: fix mixed case on vars media: zoran: get rid of an unused var media: zoran: use upper case for card types media: zoran: fix sparse warnings media: zoran: fix smatch warning media: zoran: update TODO ...
This commit is contained in:
commit
fd5c32d808
|
@ -20,13 +20,13 @@ dvb-usb-dvbsky cards list
|
|||
- 0572:0320
|
||||
* - DVBSky T680CI
|
||||
- 0572:680c
|
||||
* - MyGica Mini DVB-T2 USB Stick T230
|
||||
* - MyGica Mini DVB-(T/T2/C) USB Stick T230
|
||||
- 0572:c688
|
||||
* - MyGica Mini DVB-T2 USB Stick T230C
|
||||
* - MyGica Mini DVB-(T/T2/C) USB Stick T230C
|
||||
- 0572:c689
|
||||
* - MyGica Mini DVB-T2 USB Stick T230C Lite
|
||||
* - MyGica Mini DVB-(T/T2/C) USB Stick T230C Lite
|
||||
- 0572:c699
|
||||
* - MyGica Mini DVB-T2 USB Stick T230C v2
|
||||
* - MyGica Mini DVB-(T/T2/C) USB Stick T230C v2
|
||||
- 0572:c68a
|
||||
* - TechnoTrend TT-connect CT2-4650 CI
|
||||
- 0b48:3012
|
||||
|
|
|
@ -40,6 +40,10 @@ dvb-usb-dw2102 cards list
|
|||
- 0b48:3011
|
||||
* - TerraTec Cinergy S USB
|
||||
- 0ccd:0064
|
||||
* - Terratec Cinergy S2 PCIe Dual Port 1
|
||||
- 153b:1181
|
||||
* - Terratec Cinergy S2 PCIe Dual Port 2
|
||||
- 153b:1182
|
||||
* - Terratec Cinergy S2 USB BOX
|
||||
- 0ccd:0x0105
|
||||
* - Terratec Cinergy S2 USB HD
|
||||
|
|
|
@ -434,3 +434,7 @@ EM28xx cards list
|
|||
- PCTV DVB-S2 Stick (461e v2)
|
||||
- em28178
|
||||
- 2013:0461, 2013:0259
|
||||
* - 105
|
||||
- MyGica iGrabber
|
||||
- em2860
|
||||
- 1f4d:1abe
|
||||
|
|
|
@ -89,41 +89,41 @@ Let us take the example of ov5670 sensor connected to CSI2 port 0, for a
|
|||
Using the media contorller APIs, the ov5670 sensor is configured to send
|
||||
frames in packed raw Bayer format to IPU3 CSI2 receiver.
|
||||
|
||||
# This example assumes /dev/media0 as the CIO2 media device
|
||||
.. code-block:: none
|
||||
|
||||
export MDEV=/dev/media0
|
||||
# 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
|
||||
# and that ov5670 sensor is connected to i2c bus 10 with address 0x36
|
||||
export SDEV=$(media-ctl -d $MDEV -e "ov5670 10-0036")
|
||||
|
||||
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]"
|
||||
|
||||
# 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]"
|
||||
# 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
|
||||
|
||||
yavta -w 0x009e0903 444 $SDEV
|
||||
.. code-block:: none
|
||||
|
||||
yavta -w 0x009e0913 1024 $SDEV
|
||||
|
||||
yavta -w 0x009e0911 2046 $SDEV
|
||||
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
|
||||
|
||||
yavta --data-prefix -u -c10 -n5 -I -s2592x1944 --file=/tmp/frame-#.bin \
|
||||
-f IPU3_SGRBG10 $(media-ctl -d $MDEV -e "ipu3-cio2 0")
|
||||
.. 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.
|
||||
|
@ -269,21 +269,21 @@ all the video nodes setup correctly.
|
|||
|
||||
Let us take "ipu3-imgu 0" subdev as an example.
|
||||
|
||||
media-ctl -d $MDEV -r
|
||||
.. code-block:: none
|
||||
|
||||
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]
|
||||
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.
|
||||
|
||||
yavta -w "0x009819A1 1" /dev/v4l-subdev7
|
||||
.. 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
|
||||
|
@ -371,30 +371,32 @@ 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.
|
||||
|
||||
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
|
||||
.. 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
|
||||
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.
|
||||
|
@ -408,7 +410,9 @@ as below.
|
|||
Main output frames
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
raw2pnm -x2560 -y1920 -fNV12 /tmp/frames.out /tmp/frames.out.ppm
|
||||
.. 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.
|
||||
|
@ -416,7 +420,9 @@ by input frame and output PNM file.
|
|||
Viewfinder output frames
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
raw2pnm -x2560 -y1920 -fNV12 /tmp/frames.vf /tmp/frames.vf.ppm
|
||||
.. 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.
|
||||
|
@ -482,63 +488,63 @@ 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 :c:type:`ipu3_uapi_obgrid_param`.
|
||||
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
|
||||
:c:type:`ipu3_uapi_isp_lin_vmem_params`.
|
||||
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 :c:type:`ipu3_uapi_shd_config_static`.
|
||||
configured in struct ipu3_uapi_shd_config_static.
|
||||
BNR Bayer noise reduction block removes image noise by
|
||||
applying a bilateral filter.
|
||||
See :c:type:`ipu3_uapi_bnr_static_config` for details.
|
||||
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
|
||||
:c:type:`ipu3_uapi_anr_config`.
|
||||
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
|
||||
:c:type:`ipu3_uapi_dm_config`.
|
||||
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
|
||||
:c:type:`ipu3_uapi_ccm_mat_config`.
|
||||
Gamma correction Gamma correction :c:type:`ipu3_uapi_gamma_config` is a
|
||||
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
|
||||
:c:type:`ipu3_uapi_csc_mat_config`
|
||||
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 :c:type:`ipu3_uapi_cds_params`.
|
||||
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 :c:type:`ipu3_uapi_yuvp1_chnr_config`.
|
||||
See struct struct ipu3_uapi_yuvp1_chnr_config.
|
||||
TCC Total color correction as defined in struct
|
||||
:c:type:`ipu3_uapi_yuvp2_tcc_static_config`.
|
||||
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,
|
||||
:c:type:`ipu3_uapi_isp_xnr3_params` for ISP data memory
|
||||
and :c:type:`ipu3_uapi_isp_xnr3_vmem_params` for vector
|
||||
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. :c:type:`ipu3_uapi_isp_tnr3_vmem_params` and
|
||||
:c:type:`ipu3_uapi_isp_tnr3_params` are defined for ISP
|
||||
values. struct ipu3_uapi_isp_tnr3_vmem_params and
|
||||
struct ipu3_uapi_isp_tnr3_params are defined for ISP
|
||||
vector and data memory respectively.
|
||||
======================== =======================================================
|
||||
|
||||
|
@ -570,9 +576,9 @@ 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
|
||||
:c:type:`ipu3_uapi_acc_param`, can be chosen to be applied by the user
|
||||
space through struct :c:type:`ipu3_uapi_flags` embedded in
|
||||
:c:type:`ipu3_uapi_params` structure. For parameters that are configured as
|
||||
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.
|
||||
|
|
|
@ -90,6 +90,7 @@ sta2x11_vip STA2X11 VIP Video For Linux
|
|||
tw5864 Techwell TW5864 video/audio grabber and encoder
|
||||
tw686x Intersil/Techwell TW686x
|
||||
tw68 Techwell tw68x Video For Linux
|
||||
zoran Zoran-36057/36067 JPEG codec
|
||||
================ ========================================================
|
||||
|
||||
Some of those drivers support multiple devices, as shown at the card
|
||||
|
@ -105,3 +106,4 @@ lists below:
|
|||
ivtv-cardlist
|
||||
saa7134-cardlist
|
||||
saa7164-cardlist
|
||||
zoran-cardlist
|
||||
|
|
18
Documentation/admin-guide/media/rkisp1.dot
Normal file
18
Documentation/admin-guide/media/rkisp1.dot
Normal file
|
@ -0,0 +1,18 @@
|
|||
digraph board {
|
||||
rankdir=TB
|
||||
n00000001 [label="{{<port0> 0 | <port1> 1} | rkisp1_isp\n/dev/v4l-subdev0 | {<port2> 2 | <port3> 3}}", shape=Mrecord, style=filled, fillcolor=green]
|
||||
n00000001:port2 -> n00000006:port0
|
||||
n00000001:port2 -> n00000009:port0
|
||||
n00000001:port3 -> n00000014 [style=bold]
|
||||
n00000006 [label="{{<port0> 0} | rkisp1_resizer_mainpath\n/dev/v4l-subdev1 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
|
||||
n00000006:port1 -> n0000000c [style=bold]
|
||||
n00000009 [label="{{<port0> 0} | rkisp1_resizer_selfpath\n/dev/v4l-subdev2 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
|
||||
n00000009:port1 -> n00000010 [style=bold]
|
||||
n0000000c [label="rkisp1_mainpath\n/dev/video0", shape=box, style=filled, fillcolor=yellow]
|
||||
n00000010 [label="rkisp1_selfpath\n/dev/video1", shape=box, style=filled, fillcolor=yellow]
|
||||
n00000014 [label="rkisp1_stats\n/dev/video2", shape=box, style=filled, fillcolor=yellow]
|
||||
n00000018 [label="rkisp1_params\n/dev/video3", shape=box, style=filled, fillcolor=yellow]
|
||||
n00000018 -> n00000001:port1 [style=bold]
|
||||
n0000001c [label="{{} | imx219 4-0010\n/dev/v4l-subdev3 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
|
||||
n0000001c:port0 -> n00000001:port0
|
||||
}
|
181
Documentation/admin-guide/media/rkisp1.rst
Normal file
181
Documentation/admin-guide/media/rkisp1.rst
Normal file
|
@ -0,0 +1,181 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
.. include:: <isonum.txt>
|
||||
|
||||
=========================================
|
||||
Rockchip Image Signal Processor (rkisp1)
|
||||
=========================================
|
||||
|
||||
Introduction
|
||||
============
|
||||
|
||||
This file documents the driver for the Rockchip ISP1 that is part of RK3288
|
||||
and RK3399 SoCs. The driver is located under drivers/staging/media/rkisp1
|
||||
and uses the Media-Controller API.
|
||||
|
||||
Topology
|
||||
========
|
||||
.. _rkisp1_topology_graph:
|
||||
|
||||
.. kernel-figure:: rkisp1.dot
|
||||
:alt: Diagram of the default media pipeline topology
|
||||
:align: center
|
||||
|
||||
|
||||
The driver has 4 video devices:
|
||||
|
||||
- rkisp1_mainpath: capture device for retrieving images, usually in higher
|
||||
resolution.
|
||||
- rkisp1_selfpath: capture device for retrieving images.
|
||||
- rkisp1_stats: a metadata capture device that sends statistics.
|
||||
- rkisp1_params: a metadata output device that receives parameters
|
||||
configurations from userspace.
|
||||
|
||||
The driver has 3 subdevices:
|
||||
|
||||
- rkisp1_resizer_mainpath: used to resize and downsample frames for the
|
||||
mainpath capture device.
|
||||
- rkisp1_resizer_selfpath: used to resize and downsample frames for the
|
||||
selfpath capture device.
|
||||
- rkisp1_isp: is connected to the sensor and is responsible for all the isp
|
||||
operations.
|
||||
|
||||
|
||||
rkisp1_mainpath, rkisp1_selfpath - Frames Capture Video Nodes
|
||||
-------------------------------------------------------------
|
||||
Those are the `mainpath` and `selfpath` capture devices to capture frames.
|
||||
Those entities are the DMA engines that write the frames to memory.
|
||||
The selfpath video device can capture YUV/RGB formats. Its input is YUV encoded
|
||||
stream and it is able to convert it to RGB. The selfpath is not able to
|
||||
capture bayer formats.
|
||||
The mainpath can capture both bayer and YUV formats but it is not able to
|
||||
capture RGB formats.
|
||||
Both capture videos support
|
||||
the ``V4L2_CAP_IO_MC`` :ref:`capability <device-capabilities>`.
|
||||
|
||||
|
||||
rkisp1_resizer_mainpath, rkisp1_resizer_selfpath - Resizers Subdevices Nodes
|
||||
----------------------------------------------------------------------------
|
||||
Those are resizer entities for the mainpath and the selfpath. Those entities
|
||||
can scale the frames up and down and also change the YUV sampling (for example
|
||||
YUV4:2:2 -> YUV4:2:0). They also have cropping capability on the sink pad.
|
||||
The resizers entities can only operate on YUV:4:2:2 format
|
||||
(MEDIA_BUS_FMT_YUYV8_2X8).
|
||||
The mainpath capture device supports capturing video in bayer formats. In that
|
||||
case the resizer of the mainpath is set to 'bypass' mode - it just forward the
|
||||
frame without operating on it.
|
||||
|
||||
rkisp1_isp - Image Signal Processing Subdevice Node
|
||||
---------------------------------------------------
|
||||
This is the isp entity. It is connected to the sensor on sink pad 0 and
|
||||
receives the frames using the CSI-2 protocol. It is responsible of configuring
|
||||
the CSI-2 protocol. It has a cropping capability on sink pad 0 that is
|
||||
connected to the sensor and on source pad 2 connected to the resizer entities.
|
||||
Cropping on sink pad 0 defines the image region from the sensor.
|
||||
Cropping on source pad 2 defines the region for the Image Stabilizer (IS).
|
||||
|
||||
.. _rkisp1_stats:
|
||||
|
||||
rkisp1_stats - Statistics Video Node
|
||||
------------------------------------
|
||||
The statistics video node outputs the 3A (auto focus, auto exposure and auto
|
||||
white balance) statistics, and also histogram statistics for the frames that
|
||||
are being processed by the rkisp1 to userspace applications.
|
||||
Using these data, applications can implement algorithms and re-parameterize
|
||||
the driver through the rkisp_params node to improve image quality during a
|
||||
video stream.
|
||||
The buffer format is defined by struct :c:type:`rkisp1_stat_buffer`, and
|
||||
userspace should set
|
||||
:ref:`V4L2_META_FMT_RK_ISP1_STAT_3A <v4l2-meta-fmt-stat-rkisp1>` as the
|
||||
dataformat.
|
||||
|
||||
.. _rkisp1_params:
|
||||
|
||||
rkisp1_params - Parameters Video Node
|
||||
-------------------------------------
|
||||
The rkisp1_params video node receives a set of parameters from userspace
|
||||
to be applied to the hardware during a video stream, allowing userspace
|
||||
to dynamically modify values such as black level, cross talk corrections
|
||||
and others.
|
||||
|
||||
The buffer format is defined by struct :c:type:`rkisp1_params_cfg`, and
|
||||
userspace should set
|
||||
:ref:`V4L2_META_FMT_RK_ISP1_PARAMS <v4l2-meta-fmt-params-rkisp1>` as the
|
||||
dataformat.
|
||||
|
||||
|
||||
Capturing Video Frames Example
|
||||
==============================
|
||||
|
||||
In the following example, the sensor connected to pad 0 of 'rkisp1_isp' is
|
||||
imx219.
|
||||
|
||||
The following commands can be used to capture video from the selfpath video
|
||||
node with dimension 900x800 planar format YUV 4:2:2. It uses all cropping
|
||||
capabilities possible, (see explanation right below)
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
# set the links
|
||||
"media-ctl" "-d" "platform:rkisp1" "-r"
|
||||
"media-ctl" "-d" "platform:rkisp1" "-l" "'imx219 4-0010':0 -> 'rkisp1_isp':0 [1]"
|
||||
"media-ctl" "-d" "platform:rkisp1" "-l" "'rkisp1_isp':2 -> 'rkisp1_resizer_selfpath':0 [1]"
|
||||
"media-ctl" "-d" "platform:rkisp1" "-l" "'rkisp1_isp':2 -> 'rkisp1_resizer_mainpath':0 [0]"
|
||||
|
||||
# set format for imx219 4-0010:0
|
||||
"media-ctl" "-d" "platform:rkisp1" "--set-v4l2" '"imx219 4-0010":0 [fmt:SRGGB10_1X10/1640x1232]'
|
||||
|
||||
# set format for rkisp1_isp pads:
|
||||
"media-ctl" "-d" "platform:rkisp1" "--set-v4l2" '"rkisp1_isp":0 [fmt:SRGGB10_1X10/1640x1232 crop: (0,0)/1600x1200]'
|
||||
"media-ctl" "-d" "platform:rkisp1" "--set-v4l2" '"rkisp1_isp":2 [fmt:YUYV8_2X8/1600x1200 crop: (0,0)/1500x1100]'
|
||||
|
||||
# set format for rkisp1_resizer_selfpath pads:
|
||||
"media-ctl" "-d" "platform:rkisp1" "--set-v4l2" '"rkisp1_resizer_selfpath":0 [fmt:YUYV8_2X8/1500x1100 crop: (300,400)/1400x1000]'
|
||||
"media-ctl" "-d" "platform:rkisp1" "--set-v4l2" '"rkisp1_resizer_selfpath":1 [fmt:YUYV8_2X8/900x800]'
|
||||
|
||||
# set format for rkisp1_selfpath:
|
||||
"v4l2-ctl" "-z" "platform:rkisp1" "-d" "rkisp1_selfpath" "-v" "width=900,height=800,"
|
||||
"v4l2-ctl" "-z" "platform:rkisp1" "-d" "rkisp1_selfpath" "-v" "pixelformat=422P"
|
||||
|
||||
# start streaming:
|
||||
v4l2-ctl "-z" "platform:rkisp1" "-d" "rkisp1_selfpath" "--stream-mmap" "--stream-count" "10"
|
||||
|
||||
|
||||
In the above example the sensor is configured to bayer format:
|
||||
`SRGGB10_1X10/1640x1232`. The rkisp1_isp:0 pad should be configured to the
|
||||
same mbus format and dimensions as the sensor, otherwise streaming will fail
|
||||
with 'EPIPE' error. So it is also configured to `SRGGB10_1X10/1640x1232`.
|
||||
In addition, the rkisp1_isp:0 pad is configured to cropping `(0,0)/1600x1200`.
|
||||
|
||||
The cropping dimensions are automatically propagated to be the format of the
|
||||
isp source pad `rkisp1_isp:2`. Another cropping operation is configured on
|
||||
the isp source pad: `(0,0)/1500x1100`.
|
||||
|
||||
The resizer's sink pad `rkisp1_resizer_selfpath` should be configured to format
|
||||
`YUYV8_2X8/1500x1100` in order to match the format on the other side of the
|
||||
link. In addition a cropping `(300,400)/1400x1000` is configured on it.
|
||||
|
||||
The source pad of the resizer, `rkisp1_resizer_selfpath:1` is configured to
|
||||
format `YUYV8_2X8/900x800`. That means that the resizer first crop a window
|
||||
of `(300,400)/1400x100` from the received frame and then scales this window
|
||||
to dimension `900x800`.
|
||||
|
||||
Note that the above example does not uses the stats-params control loop.
|
||||
Therefore the capture frames will not go through the 3A algorithms and
|
||||
probably won't have a good quality, and can even look dark and greenish.
|
||||
|
||||
Configuring Quantization
|
||||
========================
|
||||
|
||||
The driver supports limited and full range quantization on YUV formats,
|
||||
where limited is the default.
|
||||
To switch between one or the other, userspace should use the Colorspace
|
||||
Conversion API (CSC) for subdevices on source pad 2 of the
|
||||
isp (`rkisp1_isp:2`). The quantization configured on this pad is the
|
||||
quantization of the captured video frames on the mainpath and selfpath
|
||||
video nodes.
|
||||
Note that the resizer and capture entities will always report
|
||||
``V4L2_QUANTIZATION_DEFAULT`` even if the quantization is configured to full
|
||||
range on `rkisp1_isp:2`. So in order to get the configured quantization,
|
||||
application should get it from pad `rkisp1_isp:2`.
|
||||
|
|
@ -20,7 +20,7 @@ Siano cards list
|
|||
- 2040:1801
|
||||
* - Hauppauge WinTV MiniCard
|
||||
- 2040:2000, 2040:200a, 2040:2010, 2040:2011, 2040:2019
|
||||
* - Hauppauge WinTV MiniCard
|
||||
* - Hauppauge WinTV MiniCard Rev 2
|
||||
- 2040:2009
|
||||
* - Hauppauge WinTV MiniStick
|
||||
- 2040:5500, 2040:5510, 2040:5520, 2040:5530, 2040:5580, 2040:5590, 2040:b900, 2040:b910, 2040:b980, 2040:b990, 2040:c000, 2040:c010, 2040:c080, 2040:c090, 2040:c0a0, 2040:f5a0
|
||||
|
|
|
@ -112,7 +112,6 @@ zr364xx USB ZR364XX Camera
|
|||
em28xx-cardlist
|
||||
tm6000-cardlist
|
||||
siano-cardlist
|
||||
usbvision-cardlist
|
||||
|
||||
gspca-cardlist
|
||||
|
||||
|
|
|
@ -1,283 +0,0 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
USBvision cards list
|
||||
====================
|
||||
|
||||
.. tabularcolumns:: |p{1.4cm}|p{11.1cm}|p{4.2cm}|
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 1
|
||||
:widths: 2 19 18
|
||||
:stub-columns: 0
|
||||
|
||||
* - Card number
|
||||
- Card name
|
||||
- USB IDs
|
||||
|
||||
* - 0
|
||||
- Xanboo
|
||||
- 0a6f:0400
|
||||
|
||||
* - 1
|
||||
- Belkin USB VideoBus II Adapter
|
||||
- 050d:0106
|
||||
|
||||
* - 2
|
||||
- Belkin Components USB VideoBus
|
||||
- 050d:0207
|
||||
|
||||
* - 3
|
||||
- Belkin USB VideoBus II
|
||||
- 050d:0208
|
||||
|
||||
* - 4
|
||||
- echoFX InterView Lite
|
||||
- 0571:0002
|
||||
|
||||
* - 5
|
||||
- USBGear USBG-V1 resp. HAMA USB
|
||||
- 0573:0003
|
||||
|
||||
* - 6
|
||||
- D-Link V100
|
||||
- 0573:0400
|
||||
|
||||
* - 7
|
||||
- X10 USB Camera
|
||||
- 0573:2000
|
||||
|
||||
* - 8
|
||||
- Hauppauge WinTV USB Live (PAL B/G)
|
||||
- 0573:2d00
|
||||
|
||||
* - 9
|
||||
- Hauppauge WinTV USB Live Pro (NTSC M/N)
|
||||
- 0573:2d01
|
||||
|
||||
* - 10
|
||||
- Zoran Co. PMD (Nogatech) AV-grabber Manhattan
|
||||
- 0573:2101
|
||||
|
||||
* - 11
|
||||
- Nogatech USB-TV (NTSC) FM
|
||||
- 0573:4100
|
||||
|
||||
* - 12
|
||||
- PNY USB-TV (NTSC) FM
|
||||
- 0573:4110
|
||||
|
||||
* - 13
|
||||
- PixelView PlayTv-USB PRO (PAL) FM
|
||||
- 0573:4450
|
||||
|
||||
* - 14
|
||||
- ZTV ZT-721 2.4GHz USB A/V Receiver
|
||||
- 0573:4550
|
||||
|
||||
* - 15
|
||||
- Hauppauge WinTV USB (NTSC M/N)
|
||||
- 0573:4d00
|
||||
|
||||
* - 16
|
||||
- Hauppauge WinTV USB (PAL B/G)
|
||||
- 0573:4d01
|
||||
|
||||
* - 17
|
||||
- Hauppauge WinTV USB (PAL I)
|
||||
- 0573:4d02
|
||||
|
||||
* - 18
|
||||
- Hauppauge WinTV USB (PAL/SECAM L)
|
||||
- 0573:4d03
|
||||
|
||||
* - 19
|
||||
- Hauppauge WinTV USB (PAL D/K)
|
||||
- 0573:4d04
|
||||
|
||||
* - 20
|
||||
- Hauppauge WinTV USB (NTSC FM)
|
||||
- 0573:4d10
|
||||
|
||||
* - 21
|
||||
- Hauppauge WinTV USB (PAL B/G FM)
|
||||
- 0573:4d11
|
||||
|
||||
* - 22
|
||||
- Hauppauge WinTV USB (PAL I FM)
|
||||
- 0573:4d12
|
||||
|
||||
* - 23
|
||||
- Hauppauge WinTV USB (PAL D/K FM)
|
||||
- 0573:4d14
|
||||
|
||||
* - 24
|
||||
- Hauppauge WinTV USB Pro (NTSC M/N)
|
||||
- 0573:4d2a
|
||||
|
||||
* - 25
|
||||
- Hauppauge WinTV USB Pro (NTSC M/N) V2
|
||||
- 0573:4d2b
|
||||
|
||||
* - 26
|
||||
- Hauppauge WinTV USB Pro (PAL/SECAM B/G/I/D/K/L)
|
||||
- 0573:4d2c
|
||||
|
||||
* - 27
|
||||
- Hauppauge WinTV USB Pro (NTSC M/N) V3
|
||||
- 0573:4d20
|
||||
|
||||
* - 28
|
||||
- Hauppauge WinTV USB Pro (PAL B/G)
|
||||
- 0573:4d21
|
||||
|
||||
* - 29
|
||||
- Hauppauge WinTV USB Pro (PAL I)
|
||||
- 0573:4d22
|
||||
|
||||
* - 30
|
||||
- Hauppauge WinTV USB Pro (PAL/SECAM L)
|
||||
- 0573:4d23
|
||||
|
||||
* - 31
|
||||
- Hauppauge WinTV USB Pro (PAL D/K)
|
||||
- 0573:4d24
|
||||
|
||||
* - 32
|
||||
- Hauppauge WinTV USB Pro (PAL/SECAM BGDK/I/L)
|
||||
- 0573:4d25
|
||||
|
||||
* - 33
|
||||
- Hauppauge WinTV USB Pro (PAL/SECAM BGDK/I/L) V2
|
||||
- 0573:4d26
|
||||
|
||||
* - 34
|
||||
- Hauppauge WinTV USB Pro (PAL B/G) V2
|
||||
- 0573:4d27
|
||||
|
||||
* - 35
|
||||
- Hauppauge WinTV USB Pro (PAL B/G,D/K)
|
||||
- 0573:4d28
|
||||
|
||||
* - 36
|
||||
- Hauppauge WinTV USB Pro (PAL I,D/K)
|
||||
- 0573:4d29
|
||||
|
||||
* - 37
|
||||
- Hauppauge WinTV USB Pro (NTSC M/N FM)
|
||||
- 0573:4d30
|
||||
|
||||
* - 38
|
||||
- Hauppauge WinTV USB Pro (PAL B/G FM)
|
||||
- 0573:4d31
|
||||
|
||||
* - 39
|
||||
- Hauppauge WinTV USB Pro (PAL I FM)
|
||||
- 0573:4d32
|
||||
|
||||
* - 40
|
||||
- Hauppauge WinTV USB Pro (PAL D/K FM)
|
||||
- 0573:4d34
|
||||
|
||||
* - 41
|
||||
- Hauppauge WinTV USB Pro (Temic PAL/SECAM B/G/I/D/K/L FM)
|
||||
- 0573:4d35
|
||||
|
||||
* - 42
|
||||
- Hauppauge WinTV USB Pro (Temic PAL B/G FM)
|
||||
- 0573:4d36
|
||||
|
||||
* - 43
|
||||
- Hauppauge WinTV USB Pro (PAL/SECAM B/G/I/D/K/L FM)
|
||||
- 0573:4d37
|
||||
|
||||
* - 44
|
||||
- Hauppauge WinTV USB Pro (NTSC M/N FM) V2
|
||||
- 0573:4d38
|
||||
|
||||
* - 45
|
||||
- Camtel Technology USB TV Genie Pro FM Model TVB330
|
||||
- 0768:0006
|
||||
|
||||
* - 46
|
||||
- Digital Video Creator I
|
||||
- 07d0:0001
|
||||
|
||||
* - 47
|
||||
- Global Village GV-007 (NTSC)
|
||||
- 07d0:0002
|
||||
|
||||
* - 48
|
||||
- Dazzle Fusion Model DVC-50 Rev 1 (NTSC)
|
||||
- 07d0:0003
|
||||
|
||||
* - 49
|
||||
- Dazzle Fusion Model DVC-80 Rev 1 (PAL)
|
||||
- 07d0:0004
|
||||
|
||||
* - 50
|
||||
- Dazzle Fusion Model DVC-90 Rev 1 (SECAM)
|
||||
- 07d0:0005
|
||||
|
||||
* - 51
|
||||
- Eskape Labs MyTV2Go
|
||||
- 07f8:9104
|
||||
|
||||
* - 52
|
||||
- Pinnacle Studio PCTV USB (PAL)
|
||||
- 2304:010d
|
||||
|
||||
* - 53
|
||||
- Pinnacle Studio PCTV USB (SECAM)
|
||||
- 2304:0109
|
||||
|
||||
* - 54
|
||||
- Pinnacle Studio PCTV USB (PAL) FM
|
||||
- 2304:0110
|
||||
|
||||
* - 55
|
||||
- Miro PCTV USB
|
||||
- 2304:0111
|
||||
|
||||
* - 56
|
||||
- Pinnacle Studio PCTV USB (NTSC) FM
|
||||
- 2304:0112
|
||||
|
||||
* - 57
|
||||
- Pinnacle Studio PCTV USB (PAL) FM V2
|
||||
- 2304:0210
|
||||
|
||||
* - 58
|
||||
- Pinnacle Studio PCTV USB (NTSC) FM V2
|
||||
- 2304:0212
|
||||
|
||||
* - 59
|
||||
- Pinnacle Studio PCTV USB (PAL) FM V3
|
||||
- 2304:0214
|
||||
|
||||
* - 60
|
||||
- Pinnacle Studio Linx Video input cable (NTSC)
|
||||
- 2304:0300
|
||||
|
||||
* - 61
|
||||
- Pinnacle Studio Linx Video input cable (PAL)
|
||||
- 2304:0301
|
||||
|
||||
* - 62
|
||||
- Pinnacle PCTV Bungee USB (PAL) FM
|
||||
- 2304:0419
|
||||
|
||||
* - 63
|
||||
- Hauppauge WinTv-USB
|
||||
- 2400:4200
|
||||
|
||||
* - 64
|
||||
- Pinnacle Studio PCTV USB (NTSC) FM V3
|
||||
- 2304:0113
|
||||
|
||||
* - 65
|
||||
- Nogatech USB MicroCam NTSC (NV3000N)
|
||||
- 0573:3000
|
||||
|
||||
* - 66
|
||||
- Nogatech USB MicroCam PAL (NV3001P)
|
||||
- 0573:3001
|
|
@ -25,6 +25,7 @@ Video4Linux (V4L) driver-specific documentation
|
|||
philips
|
||||
qcom_camss
|
||||
rcar-fdp1
|
||||
rkisp1
|
||||
saa7134
|
||||
si470x
|
||||
si4713
|
||||
|
|
51
Documentation/admin-guide/media/zoran-cardlist.rst
Normal file
51
Documentation/admin-guide/media/zoran-cardlist.rst
Normal file
|
@ -0,0 +1,51 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
Zoran cards list
|
||||
================
|
||||
|
||||
.. tabularcolumns:: |p{1.4cm}|p{11.1cm}|p{4.2cm}|
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 1
|
||||
:widths: 2 19 18
|
||||
:stub-columns: 0
|
||||
|
||||
* - Card number
|
||||
- Card name
|
||||
- PCI subsystem IDs
|
||||
|
||||
* - 0
|
||||
- DC10(old)
|
||||
- <any>
|
||||
|
||||
* - 1
|
||||
- DC10(new)
|
||||
- <any>
|
||||
|
||||
* - 2
|
||||
- DC10_PLUS
|
||||
- 1031:7efe
|
||||
|
||||
* - 3
|
||||
- DC30
|
||||
- <any>
|
||||
|
||||
* - 4
|
||||
- DC30_PLUS
|
||||
- 1031:d801
|
||||
|
||||
* - 5
|
||||
- LML33
|
||||
- <any>
|
||||
|
||||
* - 6
|
||||
- LML33R10
|
||||
- 12f8:8a02
|
||||
|
||||
* - 7
|
||||
- Buz
|
||||
- 13ca:4231
|
||||
|
||||
* - 8
|
||||
- 6-Eyes
|
||||
- <any>
|
|
@ -51,8 +51,16 @@ of the following host1x client modules:
|
|||
- vi
|
||||
- Tegra210:
|
||||
- power-domains: Must include venc powergate node as vi is in VE partition.
|
||||
- Tegra210 has CSI part of VI sharing same host interface and register space.
|
||||
So, VI device node should have CSI child node.
|
||||
|
||||
ports (optional node)
|
||||
vi can have optional ports node and max 6 ports are supported. Each port
|
||||
should have single 'endpoint' child node. All port nodes are grouped under
|
||||
ports node. Please refer to the bindings defined in
|
||||
Documentation/devicetree/bindings/media/video-interfaces.txt
|
||||
|
||||
csi (required node)
|
||||
Tegra210 has CSI part of VI sharing same host interface and register space.
|
||||
So, VI device node should have CSI child node.
|
||||
|
||||
- csi: mipi csi interface to vi
|
||||
|
||||
|
@ -65,6 +73,46 @@ of the following host1x client modules:
|
|||
- power-domains: Must include sor powergate node as csicil is in
|
||||
SOR partition.
|
||||
|
||||
channel (optional nodes)
|
||||
Maximum 6 channels are supported with each csi brick as either x4 or x2
|
||||
based on hw connectivity to sensor.
|
||||
|
||||
Required properties:
|
||||
- reg: csi port number. Valid port numbers are 0 through 5.
|
||||
- nvidia,mipi-calibrate: Should contain a phandle and a specifier
|
||||
specifying which pads are used by this CSI port and need to be
|
||||
calibrated. See also ../display/tegra/nvidia,tegra114-mipi.txt.
|
||||
|
||||
Each channel node must contain 2 port nodes which can be grouped
|
||||
under 'ports' node and each port should have a single child 'endpoint'
|
||||
node.
|
||||
|
||||
ports node
|
||||
Please refer to the bindings defined in
|
||||
Documentation/devicetree/bindings/media/video-interfaces.txt
|
||||
|
||||
ports node must contain below 2 port nodes.
|
||||
port@0 with single child 'endpoint' node always a sink.
|
||||
port@1 with single child 'endpoint' node always a source.
|
||||
|
||||
port@0 (required node)
|
||||
Required properties:
|
||||
- reg: 0
|
||||
|
||||
endpoint (required node)
|
||||
Required properties:
|
||||
- data-lanes: an array of data lane from 1 to 4. Valid array
|
||||
lengths are 1/2/4.
|
||||
- remote-endpoint: phandle to sensor 'endpoint' node.
|
||||
|
||||
port@1 (required node)
|
||||
Required properties:
|
||||
- reg: 1
|
||||
|
||||
endpoint (required node)
|
||||
Required properties:
|
||||
- remote-endpoint: phandle to vi port 'endpoint' node.
|
||||
|
||||
- epp: encoder pre-processor
|
||||
|
||||
Required properties:
|
||||
|
@ -340,6 +388,18 @@ Example:
|
|||
|
||||
ranges = <0x0 0x0 0x54080000 0x2000>;
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
imx219_vi_in0: endpoint {
|
||||
remote-endpoint = <&imx219_csi_out0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
csi@838 {
|
||||
compatible = "nvidia,tegra210-csi";
|
||||
reg = <0x838 0x1300>;
|
||||
|
@ -362,6 +422,34 @@ Example:
|
|||
<&tegra_car TEGRA210_CLK_CSI_TPG>;
|
||||
clock-names = "csi", "cilab", "cilcd", "cile", "csi_tpg";
|
||||
power-domains = <&pd_sor>;
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
channel@0 {
|
||||
reg = <0>;
|
||||
nvidia,mipi-calibrate = <&mipi 0x001>;
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
imx219_csi_in0: endpoint {
|
||||
data-lanes = <1 2>;
|
||||
remote-endpoint = <&imx219_out0>;
|
||||
};
|
||||
};
|
||||
|
||||
port@1 {
|
||||
reg = <1>;
|
||||
imx219_csi_out0: endpoint {
|
||||
remote-endpoint = <&imx219_vi_in0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -7,6 +7,8 @@ Required properties:
|
|||
Optional properties:
|
||||
- linux,rc-map-name: see rc.txt file in the same
|
||||
directory.
|
||||
- linux,autosuspend-period: autosuspend delay time,
|
||||
the unit is milisecond.
|
||||
|
||||
Example node:
|
||||
|
||||
|
@ -14,4 +16,5 @@ Example node:
|
|||
compatible = "gpio-ir-receiver";
|
||||
gpios = <&gpio0 19 1>;
|
||||
linux,rc-map-name = "rc-rc6-mce";
|
||||
linux,autosuspend-period = <125>;
|
||||
};
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
Omnivision OV5647 raw image sensor
|
||||
---------------------------------
|
||||
|
||||
OV5647 is a raw image sensor with MIPI CSI-2 and CCP2 image data interfaces
|
||||
and CCI (I2C compatible) control bus.
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible : "ovti,ov5647".
|
||||
- reg : I2C slave address of the sensor.
|
||||
- clocks : Reference to the xclk clock.
|
||||
|
||||
The common video interfaces bindings (see video-interfaces.txt) should be
|
||||
used to specify link to the image data receiver. The OV5647 device
|
||||
node should contain one 'port' child node with an 'endpoint' subnode.
|
||||
|
||||
Endpoint node mandatory properties:
|
||||
|
||||
- remote-endpoint: A phandle to the bus receiver's endpoint node.
|
||||
|
||||
Example:
|
||||
|
||||
i2c@2000 {
|
||||
...
|
||||
ov: camera@36 {
|
||||
compatible = "ovti,ov5647";
|
||||
reg = <0x36>;
|
||||
clocks = <&camera_clk>;
|
||||
port {
|
||||
camera_1: endpoint {
|
||||
remote-endpoint = <&csi1_ep1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
88
Documentation/devicetree/bindings/media/i2c/ov5647.yaml
Normal file
88
Documentation/devicetree/bindings/media/i2c/ov5647.yaml
Normal file
|
@ -0,0 +1,88 @@
|
|||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/media/i2c/ov5647.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Omnivision OV5647 raw image sensor
|
||||
|
||||
maintainers:
|
||||
- Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
- Jacopo Mondi <jacopo@jmondi.org>
|
||||
|
||||
description: |-
|
||||
The OV5647 is a raw image sensor with MIPI CSI-2 and CCP2 image data
|
||||
interfaces and CCI (I2C compatible) control bus.
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: ovti,ov5647
|
||||
|
||||
reg:
|
||||
description: I2C device address.
|
||||
maxItems: 1
|
||||
|
||||
clocks:
|
||||
description: Reference to the xclk clock.
|
||||
maxItems: 1
|
||||
|
||||
pwdn-gpios:
|
||||
description: Reference to the GPIO connected to the pwdn pin. Active high.
|
||||
maxItems: 1
|
||||
|
||||
port:
|
||||
type: object
|
||||
description: |-
|
||||
Should contain one endpoint sub-node used to model connection to the
|
||||
video receiver according to the specification defined in
|
||||
Documentation/devicetree/bindings/media/video-interfaces.txt.
|
||||
|
||||
properties:
|
||||
endpoint:
|
||||
type: object
|
||||
|
||||
properties:
|
||||
remote-endpoint:
|
||||
description: |-
|
||||
phandle to the video receiver input port.
|
||||
|
||||
clock-noncontinuous:
|
||||
type: boolean
|
||||
description: |-
|
||||
Set to true to allow MIPI CSI-2 non-continuous clock operations.
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- clocks
|
||||
- port
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
|
||||
i2c {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
ov5647: camera@36 {
|
||||
compatible = "ovti,ov5647";
|
||||
reg = <0x36>;
|
||||
clocks = <&camera_clk>;
|
||||
pwdn-gpios = <&pioE 29 GPIO_ACTIVE_HIGH>;
|
||||
|
||||
port {
|
||||
camera_out: endpoint {
|
||||
remote-endpoint = <&csi1_ep1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
...
|
|
@ -0,0 +1,35 @@
|
|||
* MediaTek JPEG Encoder
|
||||
|
||||
MediaTek JPEG Encoder is the JPEG encode hardware present in MediaTek SoCs
|
||||
|
||||
Required properties:
|
||||
- compatible : "mediatek,mt2701-jpgenc"
|
||||
followed by "mediatek,mtk-jpgenc"
|
||||
- reg : physical base address of the JPEG encoder registers and length of
|
||||
memory mapped region.
|
||||
- interrupts : interrupt number to the interrupt controller.
|
||||
- clocks: device clocks, see
|
||||
Documentation/devicetree/bindings/clock/clock-bindings.txt for details.
|
||||
- clock-names: must contain "jpgenc". It is the clock of JPEG encoder.
|
||||
- power-domains: a phandle to the power domain, see
|
||||
Documentation/devicetree/bindings/power/power_domain.txt for details.
|
||||
- mediatek,larb: must contain the local arbiters in the current SoCs, see
|
||||
Documentation/devicetree/bindings/memory-controllers/mediatek,smi-larb.txt
|
||||
for details.
|
||||
- iommus: should point to the respective IOMMU block with master port as
|
||||
argument, see Documentation/devicetree/bindings/iommu/mediatek,iommu.txt
|
||||
for details.
|
||||
|
||||
Example:
|
||||
jpegenc: jpegenc@1500a000 {
|
||||
compatible = "mediatek,mt2701-jpgenc",
|
||||
"mediatek,mtk-jpgenc";
|
||||
reg = <0 0x1500a000 0 0x1000>;
|
||||
interrupts = <GIC_SPI 141 IRQ_TYPE_LEVEL_LOW>;
|
||||
clocks = <&imgsys CLK_IMG_VENC>;
|
||||
clock-names = "jpgenc";
|
||||
power-domains = <&scpsys MT2701_POWER_DOMAIN_ISP>;
|
||||
mediatek,larb = <&larb2>;
|
||||
iommus = <&iommu MT2701_M4U_PORT_JPGENC_RDMA>,
|
||||
<&iommu MT2701_M4U_PORT_JPGENC_BSDMA>;
|
||||
};
|
|
@ -4,8 +4,9 @@ Mediatek Video Codec is the video codec hw present in Mediatek SoCs which
|
|||
supports high resolution encoding and decoding functionalities.
|
||||
|
||||
Required properties:
|
||||
- compatible : "mediatek,mt8173-vcodec-enc" for encoder
|
||||
"mediatek,mt8173-vcodec-dec" for decoder.
|
||||
- compatible : "mediatek,mt8173-vcodec-enc" for MT8173 encoder
|
||||
"mediatek,mt8183-vcodec-enc" for MT8183 encoder.
|
||||
"mediatek,mt8173-vcodec-dec" for MT8173 decoder.
|
||||
- reg : Physical base address of the video codec registers and length of
|
||||
memory mapped region.
|
||||
- interrupts : interrupt number to the cpu.
|
||||
|
@ -19,7 +20,9 @@ Required properties:
|
|||
- iommus : should point to the respective IOMMU block with master port as
|
||||
argument, see Documentation/devicetree/bindings/iommu/mediatek,iommu.txt
|
||||
for details.
|
||||
- mediatek,vpu : the node of video processor unit
|
||||
One of the two following nodes:
|
||||
- mediatek,vpu : the node of the video processor unit, if using VPU.
|
||||
- mediatek,scp : the node of the SCP unit, if using SCP.
|
||||
|
||||
|
||||
Example:
|
||||
|
|
|
@ -25,12 +25,16 @@ properties:
|
|||
maxItems: 1
|
||||
|
||||
power-domains:
|
||||
maxItems: 2
|
||||
minItems: 2
|
||||
maxItems: 3
|
||||
|
||||
power-domain-names:
|
||||
minItems: 2
|
||||
maxItems: 3
|
||||
items:
|
||||
- const: venus
|
||||
- const: vcodec0
|
||||
- const: cx
|
||||
|
||||
clocks:
|
||||
maxItems: 5
|
||||
|
|
|
@ -25,13 +25,17 @@ properties:
|
|||
maxItems: 1
|
||||
|
||||
power-domains:
|
||||
maxItems: 3
|
||||
minItems: 3
|
||||
maxItems: 4
|
||||
|
||||
power-domain-names:
|
||||
minItems: 3
|
||||
maxItems: 4
|
||||
items:
|
||||
- const: venus
|
||||
- const: vcodec0
|
||||
- const: vcodec1
|
||||
- const: cx
|
||||
|
||||
clocks:
|
||||
maxItems: 7
|
||||
|
|
|
@ -22,6 +22,7 @@ properties:
|
|||
- renesas,r8a774a1-csi2 # RZ/G2M
|
||||
- renesas,r8a774b1-csi2 # RZ/G2N
|
||||
- renesas,r8a774c0-csi2 # RZ/G2E
|
||||
- renesas,r8a774e1-csi2 # RZ/G2H
|
||||
- renesas,r8a7795-csi2 # R-Car H3
|
||||
- renesas,r8a7796-csi2 # R-Car M3-W
|
||||
- renesas,r8a77965-csi2 # R-Car M3-N
|
||||
|
|
|
@ -24,6 +24,7 @@ properties:
|
|||
oneOf:
|
||||
- items:
|
||||
- enum:
|
||||
- renesas,vin-r8a7742 # RZ/G1H
|
||||
- renesas,vin-r8a7743 # RZ/G1M
|
||||
- renesas,vin-r8a7744 # RZ/G1N
|
||||
- renesas,vin-r8a7745 # RZ/G1E
|
||||
|
@ -40,6 +41,7 @@ properties:
|
|||
- renesas,vin-r8a774a1 # RZ/G2M
|
||||
- renesas,vin-r8a774b1 # RZ/G2N
|
||||
- renesas,vin-r8a774c0 # RZ/G2E
|
||||
- renesas,vin-r8a774e1 # RZ/G2H
|
||||
- renesas,vin-r8a7778 # R-Car M1
|
||||
- renesas,vin-r8a7779 # R-Car H1
|
||||
- renesas,vin-r8a7795 # R-Car H3
|
||||
|
|
|
@ -95,7 +95,7 @@ Optional properties:
|
|||
|
||||
This node should contain child 'port' nodes specifying active parallel video
|
||||
input ports. It includes camera A and camera B inputs. 'reg' property in the
|
||||
port nodes specifies data input - 0, 1 indicates input A, B respectively.
|
||||
port nodes specifies data input - 1, 2 indicates input A, B respectively.
|
||||
|
||||
Optional properties
|
||||
|
||||
|
@ -172,8 +172,8 @@ Example:
|
|||
/* parallel camera ports */
|
||||
parallel-ports {
|
||||
/* camera A input */
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
port@1 {
|
||||
reg = <1>;
|
||||
fimc0_ep: endpoint {
|
||||
remote-endpoint = <&s5k6aa_ep>;
|
||||
bus-width = <8>;
|
||||
|
|
134
Documentation/driver-api/media/camera-sensor.rst
Normal file
134
Documentation/driver-api/media/camera-sensor.rst
Normal file
|
@ -0,0 +1,134 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
Writing camera sensor drivers
|
||||
=============================
|
||||
|
||||
CSI-2
|
||||
-----
|
||||
|
||||
Please see what is written on :ref:`MIPI_CSI_2`.
|
||||
|
||||
Handling clocks
|
||||
---------------
|
||||
|
||||
Camera sensors have an internal clock tree including a PLL and a number of
|
||||
divisors. The clock tree is generally configured by the driver based on a few
|
||||
input parameters that are specific to the hardware:: the external clock frequency
|
||||
and the link frequency. The two parameters generally are obtained from system
|
||||
firmware. No other frequencies should be used in any circumstances.
|
||||
|
||||
The reason why the clock frequencies are so important is that the clock signals
|
||||
come out of the SoC, and in many cases a specific frequency is designed to be
|
||||
used in the system. Using another frequency may cause harmful effects
|
||||
elsewhere. Therefore only the pre-determined frequencies are configurable by the
|
||||
user.
|
||||
|
||||
Frame size
|
||||
----------
|
||||
|
||||
There are two distinct ways to configure the frame size produced by camera
|
||||
sensors.
|
||||
|
||||
Freely configurable camera sensor drivers
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Freely configurable camera sensor drivers expose the device's internal
|
||||
processing pipeline as one or more sub-devices with different cropping and
|
||||
scaling configurations. The output size of the device is the result of a series
|
||||
of cropping and scaling operations from the device's pixel array's size.
|
||||
|
||||
An example of such a driver is the smiapp driver (see drivers/media/i2c/smiapp).
|
||||
|
||||
Register list based drivers
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Register list based drivers generally, instead of able to configure the device
|
||||
they control based on user requests, are limited to a number of preset
|
||||
configurations that combine a number of different parameters that on hardware
|
||||
level are independent. How a driver picks such configuration is based on the
|
||||
format set on a source pad at the end of the device's internal pipeline.
|
||||
|
||||
Most sensor drivers are implemented this way, see e.g.
|
||||
drivers/media/i2c/imx319.c for an example.
|
||||
|
||||
Frame interval configuration
|
||||
----------------------------
|
||||
|
||||
There are two different methods for obtaining possibilities for different frame
|
||||
intervals as well as configuring the frame interval. Which one to implement
|
||||
depends on the type of the device.
|
||||
|
||||
Raw camera sensors
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Instead of a high level parameter such as frame interval, the frame interval is
|
||||
a result of the configuration of a number of camera sensor implementation
|
||||
specific parameters. Luckily, these parameters tend to be the same for more or
|
||||
less all modern raw camera sensors.
|
||||
|
||||
The frame interval is calculated using the following equation::
|
||||
|
||||
frame interval = (analogue crop width + horizontal blanking) *
|
||||
(analogue crop height + vertical blanking) / pixel rate
|
||||
|
||||
The formula is bus independent and is applicable for raw timing parameters on
|
||||
large variety of devices beyond camera sensors. Devices that have no analogue
|
||||
crop, use the full source image size, i.e. pixel array size.
|
||||
|
||||
Horizontal and vertical blanking are specified by ``V4L2_CID_HBLANK`` and
|
||||
``V4L2_CID_VBLANK``, respectively. The unit of these controls are lines. The
|
||||
pixel rate is specified by ``V4L2_CID_PIXEL_RATE`` in the same sub-device. The
|
||||
unit of that control is Hz.
|
||||
|
||||
Register list based drivers need to implement read-only sub-device nodes for the
|
||||
purpose. Devices that are not register list based need these to configure the
|
||||
device's internal processing pipeline.
|
||||
|
||||
The first entity in the linear pipeline is the pixel array. The pixel array may
|
||||
be followed by other entities that are there to allow configuring binning,
|
||||
skipping, scaling or digital crop :ref:`v4l2-subdev-selections`.
|
||||
|
||||
USB cameras etc. devices
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
USB video class hardware, as well as many cameras offering a similar higher
|
||||
level interface natively, generally use the concept of frame interval (or frame
|
||||
rate) on device level in firmware or hardware. This means lower level controls
|
||||
implemented by raw cameras may not be used on uAPI (or even kAPI) to control the
|
||||
frame interval on these devices.
|
||||
|
||||
Power management
|
||||
----------------
|
||||
|
||||
Always use runtime PM to manage the power states of your device. Camera sensor
|
||||
drivers are in no way special in this respect: they are responsible for
|
||||
controlling the power state of the device they otherwise control as well. In
|
||||
general, the device must be powered on at least when its registers are being
|
||||
accessed and when it is streaming.
|
||||
|
||||
Existing camera sensor drivers may rely on the old
|
||||
:c:type:`v4l2_subdev_core_ops`->s_power() callback for bridge or ISP drivers to
|
||||
manage their power state. This is however **deprecated**. If you feel you need
|
||||
to begin calling an s_power from an ISP or a bridge driver, instead please add
|
||||
runtime PM support to the sensor driver you are using. Likewise, new drivers
|
||||
should not use s_power.
|
||||
|
||||
Please see examples in e.g. ``drivers/media/i2c/ov8856.c`` and
|
||||
``drivers/media/i2c/smiapp/smiapp-core.c``. The two drivers work in both ACPI
|
||||
and DT based systems.
|
||||
|
||||
Control framework
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
``v4l2_ctrl_handler_setup()`` function may not be used in the device's runtime
|
||||
PM ``runtime_resume`` callback, as it has no way to figure out the power state
|
||||
of the device. This is because the power state of the device is only changed
|
||||
after the power state transition has taken place. The ``s_ctrl`` callback can be
|
||||
used to obtain device's power state after the power state transition:
|
||||
|
||||
.. c:function::
|
||||
int pm_runtime_get_if_in_use(struct device *dev);
|
||||
|
||||
The function returns a non-zero value if it succeeded getting the power count or
|
||||
runtime PM was disabled, in either of which cases the driver may proceed to
|
||||
access the device.
|
|
@ -36,8 +36,9 @@ The struct cec_adapter represents the CEC adapter hardware. It is created by
|
|||
calling cec_allocate_adapter() and deleted by calling cec_delete_adapter():
|
||||
|
||||
.. c:function::
|
||||
struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops, void *priv,
|
||||
const char *name, u32 caps, u8 available_las);
|
||||
struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops, \
|
||||
void *priv, const char *name, \
|
||||
u32 caps, u8 available_las);
|
||||
|
||||
.. c:function::
|
||||
void cec_delete_adapter(struct cec_adapter *adap);
|
||||
|
@ -74,7 +75,8 @@ To register the /dev/cecX device node and the remote control device (if
|
|||
CEC_CAP_RC is set) you call:
|
||||
|
||||
.. c:function::
|
||||
int cec_register_adapter(struct cec_adapter *adap, struct device *parent);
|
||||
int cec_register_adapter(struct cec_adapter *adap, \
|
||||
struct device *parent);
|
||||
|
||||
where parent is the parent device.
|
||||
|
||||
|
@ -123,9 +125,8 @@ The seven low-level ops deal with various aspects of controlling the CEC adapter
|
|||
hardware:
|
||||
|
||||
|
||||
To enable/disable the hardware:
|
||||
To enable/disable the hardware::
|
||||
|
||||
.. c:function::
|
||||
int (*adap_enable)(struct cec_adapter *adap, bool enable);
|
||||
|
||||
This callback enables or disables the CEC hardware. Enabling the CEC hardware
|
||||
|
@ -137,9 +138,8 @@ state of the CEC adapter after calling cec_allocate_adapter() is disabled.
|
|||
Note that adap_enable must return 0 if enable is false.
|
||||
|
||||
|
||||
To enable/disable the 'monitor all' mode:
|
||||
To enable/disable the 'monitor all' mode::
|
||||
|
||||
.. c:function::
|
||||
int (*adap_monitor_all_enable)(struct cec_adapter *adap, bool enable);
|
||||
|
||||
If enabled, then the adapter should be put in a mode to also monitor messages
|
||||
|
@ -150,9 +150,8 @@ called if the CEC_CAP_MONITOR_ALL capability is set. This callback is optional
|
|||
Note that adap_monitor_all_enable must return 0 if enable is false.
|
||||
|
||||
|
||||
To enable/disable the 'monitor pin' mode:
|
||||
To enable/disable the 'monitor pin' mode::
|
||||
|
||||
.. c:function::
|
||||
int (*adap_monitor_pin_enable)(struct cec_adapter *adap, bool enable);
|
||||
|
||||
If enabled, then the adapter should be put in a mode to also monitor CEC pin
|
||||
|
@ -163,9 +162,8 @@ the CEC_CAP_MONITOR_PIN capability is set. This callback is optional
|
|||
Note that adap_monitor_pin_enable must return 0 if enable is false.
|
||||
|
||||
|
||||
To program a new logical address:
|
||||
To program a new logical address::
|
||||
|
||||
.. c:function::
|
||||
int (*adap_log_addr)(struct cec_adapter *adap, u8 logical_addr);
|
||||
|
||||
If logical_addr == CEC_LOG_ADDR_INVALID then all programmed logical addresses
|
||||
|
@ -177,9 +175,8 @@ can receive directed messages to that address.
|
|||
Note that adap_log_addr must return 0 if logical_addr is CEC_LOG_ADDR_INVALID.
|
||||
|
||||
|
||||
To transmit a new message:
|
||||
To transmit a new message::
|
||||
|
||||
.. c:function::
|
||||
int (*adap_transmit)(struct cec_adapter *adap, u8 attempts,
|
||||
u32 signal_free_time, struct cec_msg *msg);
|
||||
|
||||
|
@ -196,17 +193,15 @@ The CEC_FREE_TIME_TO_USEC macro can be used to convert signal_free_time to
|
|||
microseconds (one data bit period is 2.4 ms).
|
||||
|
||||
|
||||
To log the current CEC hardware status:
|
||||
To log the current CEC hardware status::
|
||||
|
||||
.. c:function::
|
||||
void (*adap_status)(struct cec_adapter *adap, struct seq_file *file);
|
||||
|
||||
This optional callback can be used to show the status of the CEC hardware.
|
||||
The status is available through debugfs: cat /sys/kernel/debug/cec/cecX/status
|
||||
|
||||
To free any resources when the adapter is deleted:
|
||||
To free any resources when the adapter is deleted::
|
||||
|
||||
.. c:function::
|
||||
void (*adap_free)(struct cec_adapter *adap);
|
||||
|
||||
This optional callback can be used to free any resources that might have been
|
||||
|
@ -216,15 +211,14 @@ allocated by the driver. It's called from cec_delete_adapter.
|
|||
Your adapter driver will also have to react to events (typically interrupt
|
||||
driven) by calling into the framework in the following situations:
|
||||
|
||||
When a transmit finished (successfully or otherwise):
|
||||
When a transmit finished (successfully or otherwise)::
|
||||
|
||||
.. c:function::
|
||||
void cec_transmit_done(struct cec_adapter *adap, u8 status, u8 arb_lost_cnt,
|
||||
u8 nack_cnt, u8 low_drive_cnt, u8 error_cnt);
|
||||
void cec_transmit_done(struct cec_adapter *adap, u8 status,
|
||||
u8 arb_lost_cnt, u8 nack_cnt, u8 low_drive_cnt,
|
||||
u8 error_cnt);
|
||||
|
||||
or:
|
||||
or::
|
||||
|
||||
.. c:function::
|
||||
void cec_transmit_attempt_done(struct cec_adapter *adap, u8 status);
|
||||
|
||||
The status can be one of:
|
||||
|
@ -341,17 +335,15 @@ So this must work:
|
|||
$ cat einj.txt >error-inj
|
||||
|
||||
The first callback is called when this file is read and it should show the
|
||||
the current error injection state:
|
||||
the current error injection state::
|
||||
|
||||
.. c:function::
|
||||
int (*error_inj_show)(struct cec_adapter *adap, struct seq_file *sf);
|
||||
|
||||
It is recommended that it starts with a comment block with basic usage
|
||||
information. It returns 0 for success and an error otherwise.
|
||||
|
||||
The second callback will parse commands written to the ``error-inj`` file:
|
||||
The second callback will parse commands written to the ``error-inj`` file::
|
||||
|
||||
.. c:function::
|
||||
bool (*error_inj_parse_line)(struct cec_adapter *adap, char *line);
|
||||
|
||||
The ``line`` argument points to the start of the command. Any leading
|
||||
|
@ -382,9 +374,8 @@ CEC protocol driven. The following high-level callbacks are available:
|
|||
};
|
||||
|
||||
The received() callback allows the driver to optionally handle a newly
|
||||
received CEC message
|
||||
received CEC message::
|
||||
|
||||
.. c:function::
|
||||
int (*received)(struct cec_adapter *adap, struct cec_msg *msg);
|
||||
|
||||
If the driver wants to process a CEC message, then it can implement this
|
||||
|
@ -399,15 +390,14 @@ CEC framework functions
|
|||
CEC Adapter drivers can call the following CEC framework functions:
|
||||
|
||||
.. c:function::
|
||||
int cec_transmit_msg(struct cec_adapter *adap, struct cec_msg *msg,
|
||||
bool block);
|
||||
int cec_transmit_msg(struct cec_adapter *adap, struct cec_msg *msg, \
|
||||
bool block);
|
||||
|
||||
Transmit a CEC message. If block is true, then wait until the message has been
|
||||
transmitted, otherwise just queue it and return.
|
||||
|
||||
.. c:function::
|
||||
void cec_s_phys_addr(struct cec_adapter *adap, u16 phys_addr,
|
||||
bool block);
|
||||
void cec_s_phys_addr(struct cec_adapter *adap, u16 phys_addr, bool block);
|
||||
|
||||
Change the physical address. This function will set adap->phys_addr and
|
||||
send an event if it has changed. If cec_s_log_addrs() has been called and
|
||||
|
@ -422,15 +412,15 @@ to another valid physical address, then this function will first set the
|
|||
address to CEC_PHYS_ADDR_INVALID before enabling the new physical address.
|
||||
|
||||
.. c:function::
|
||||
void cec_s_phys_addr_from_edid(struct cec_adapter *adap,
|
||||
const struct edid *edid);
|
||||
void cec_s_phys_addr_from_edid(struct cec_adapter *adap, \
|
||||
const struct edid *edid);
|
||||
|
||||
A helper function that extracts the physical address from the edid struct
|
||||
and calls cec_s_phys_addr() with that address, or CEC_PHYS_ADDR_INVALID
|
||||
if the EDID did not contain a physical address or edid was a NULL pointer.
|
||||
|
||||
.. c:function::
|
||||
int cec_s_log_addrs(struct cec_adapter *adap,
|
||||
int cec_s_log_addrs(struct cec_adapter *adap, \
|
||||
struct cec_log_addrs *log_addrs, bool block);
|
||||
|
||||
Claim the CEC logical addresses. Should never be called if CEC_CAP_LOG_ADDRS
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
.. _MIPI_CSI_2:
|
||||
|
||||
MIPI CSI-2
|
||||
==========
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@ Video4Linux (V4L) drivers
|
|||
sh_mobile_ceu_camera
|
||||
tuners
|
||||
vimc-devel
|
||||
zoran
|
||||
|
||||
|
||||
Digital TV drivers
|
||||
|
@ -35,4 +36,5 @@ Digital TV drivers
|
|||
|
||||
dvb-usb
|
||||
frontends
|
||||
vidtv
|
||||
contributors
|
||||
|
|
425
Documentation/driver-api/media/drivers/vidtv.rst
Normal file
425
Documentation/driver-api/media/drivers/vidtv.rst
Normal file
|
@ -0,0 +1,425 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
================================
|
||||
vidtv: Virtual Digital TV driver
|
||||
================================
|
||||
|
||||
Author: Daniel W. S. Almeida <dwlsalmeida@gmail.com>, June 2020.
|
||||
|
||||
Background
|
||||
----------
|
||||
|
||||
Vidtv is a virtual DVB driver that aims to serve as a reference for driver
|
||||
writers by serving as a template. It also validates the existing media DVB
|
||||
APIs, thus helping userspace application writers.
|
||||
|
||||
Currently, it consists of:
|
||||
|
||||
- A fake tuner driver, which will report a bad signal quality if the chosen
|
||||
frequency is too far away from a table of valid frequencies for a
|
||||
particular delivery system.
|
||||
|
||||
- A fake demod driver, which will constantly poll the fake signal quality
|
||||
returned by the tuner, simulating a device that can lose/reacquire a lock
|
||||
on the signal depending on the CNR levels.
|
||||
|
||||
- A fake bridge driver, which is the module responsible for modprobing the
|
||||
fake tuner and demod modules and implementing the demux logic. This module
|
||||
takes parameters at initialization that will dictate how the simulation
|
||||
behaves.
|
||||
|
||||
- Code reponsible for encoding a valid MPEG Transport Stream, which is then
|
||||
passed to the bridge driver. This fake stream contains some hardcoded content.
|
||||
For now, we have a single, audio-only channel containing a single MPEG
|
||||
Elementary Stream, which in turn contains a SMPTE 302m encoded sine-wave.
|
||||
Note that this particular encoder was chosen because it is the easiest
|
||||
way to encode PCM audio data in a MPEG Transport Stream.
|
||||
|
||||
Building vidtv
|
||||
--------------
|
||||
vidtv is a test driver and thus is **not** enabled by default when
|
||||
compiling the kernel.
|
||||
|
||||
In order to enable compilation of vidtv:
|
||||
|
||||
- Enable **DVB_TEST_DRIVERS**, then
|
||||
- Enable **DVB_VIDTV**
|
||||
|
||||
When compiled as a module, expect the following .ko files:
|
||||
|
||||
- dvb_vidtv_tuner.ko
|
||||
|
||||
- dvb_vidtv_demod.ko
|
||||
|
||||
- dvb_vidtv_bridge.ko
|
||||
|
||||
Running vidtv
|
||||
-------------
|
||||
When compiled as a module, run::
|
||||
|
||||
modprobe vidtv
|
||||
|
||||
That's it! The bridge driver will initialize the tuner and demod drivers as
|
||||
part of its own initialization.
|
||||
|
||||
By default, it will accept the following frequencies:
|
||||
|
||||
- 474 MHz for DVB-T/T2/C;
|
||||
- 11,362 GHz for DVB-S/S2.
|
||||
|
||||
For satellite systems, the driver simulates an universal extended
|
||||
LNBf, with frequencies at Ku-Band, ranging from 10.7 GHz to 12.75 GHz.
|
||||
|
||||
You can optionally define some command-line arguments to vidtv.
|
||||
|
||||
Command-line arguments to vidtv
|
||||
-------------------------------
|
||||
Below is a list of all arguments that can be supplied to vidtv:
|
||||
|
||||
drop_tslock_prob_on_low_snr
|
||||
Probability of losing the TS lock if the signal quality is bad.
|
||||
This probability be used by the fake demodulator driver to
|
||||
eventually return a status of 0 when the signal quality is not
|
||||
good.
|
||||
|
||||
recover_tslock_prob_on_good_snr:
|
||||
Probability recovering the TS lock when the signal improves. This
|
||||
probability be used by the fake demodulator driver to eventually
|
||||
return a status of 0x1f when/if the signal quality improves.
|
||||
|
||||
mock_power_up_delay_msec
|
||||
Simulate a power up delay. Default: 0.
|
||||
|
||||
mock_tune_delay_msec
|
||||
Simulate a tune delay. Default 0.
|
||||
|
||||
vidtv_valid_dvb_t_freqs
|
||||
Valid DVB-T frequencies to simulate, in Hz.
|
||||
|
||||
vidtv_valid_dvb_c_freqs
|
||||
Valid DVB-C frequencies to simulate, in Hz.
|
||||
|
||||
vidtv_valid_dvb_s_freqs
|
||||
Valid DVB-S/S2 frequencies to simulate at Ku-Band, in kHz.
|
||||
|
||||
max_frequency_shift_hz,
|
||||
Maximum shift in HZ allowed when tuning in a channel.
|
||||
|
||||
si_period_msec
|
||||
How often to send SI packets. Default: 40ms.
|
||||
|
||||
pcr_period_msec
|
||||
How often to send PCR packets. Default: 40ms.
|
||||
|
||||
mux_rate_kbytes_sec
|
||||
Attempt to maintain this bit rate by inserting TS null packets, if
|
||||
necessary. Default: 4096.
|
||||
|
||||
pcr_pid,
|
||||
PCR PID for all channels. Default: 0x200.
|
||||
|
||||
mux_buf_sz_pkts,
|
||||
Size for the mux buffer in multiples of 188 bytes.
|
||||
|
||||
vidtv internal structure
|
||||
------------------------
|
||||
The kernel modules are split in the following way:
|
||||
|
||||
vidtv_tuner.[ch]
|
||||
Implements a fake tuner DVB driver.
|
||||
|
||||
vidtv_demod.[ch]
|
||||
Implements a fake demodulator DVB driver.
|
||||
|
||||
vidtv_bridge.[ch]
|
||||
Implements a bridge driver.
|
||||
|
||||
The MPEG related code is split in the following way:
|
||||
|
||||
vidtv_ts.[ch]
|
||||
Code to work with MPEG TS packets, such as TS headers, adaptation
|
||||
fields, PCR packets and NULL packets.
|
||||
|
||||
vidtv_psi.[ch]
|
||||
This is the PSI generator. PSI packets contain general information
|
||||
about a MPEG Transport Stream. A PSI generator is needed so
|
||||
userspace apps can retrieve information about the Transport Stream
|
||||
and eventually tune into a (dummy) channel.
|
||||
|
||||
Because the generator is implemented in a separate file, it can be
|
||||
reused elsewhere in the media subsystem.
|
||||
|
||||
Currently vidtv supports working with 3 PSI tables: PAT, PMT and
|
||||
SDT.
|
||||
|
||||
The specification for PAT and PMT can be found in *ISO 13818-1:
|
||||
Systems*, while the specification for the SDT can be found in *ETSI
|
||||
EN 300 468: Specification for Service Information (SI) in DVB
|
||||
systems*.
|
||||
|
||||
It isn't strictly necessary, but using a real TS file helps when
|
||||
debugging PSI tables. Vidtv currently tries to replicate the PSI
|
||||
structure found in this file: `TS1Globo.ts
|
||||
<https://tsduck.io/streams/brazil-isdb-tb/TS1globo.ts>`_.
|
||||
|
||||
A good way to visualize the structure of streams is by using
|
||||
`DVBInspector <https://sourceforge.net/projects/dvbinspector/>`_.
|
||||
|
||||
vidtv_pes.[ch]
|
||||
Implements the PES logic to convert encoder data into MPEG TS
|
||||
packets. These can then be fed into a TS multiplexer and eventually
|
||||
into userspace.
|
||||
|
||||
vidtv_encoder.h
|
||||
An interface for vidtv encoders. New encoders can be added to this
|
||||
driver by implementing the calls in this file.
|
||||
|
||||
vidtv_s302m.[ch]
|
||||
Implements a S302M encoder to make it possible to insert PCM audio
|
||||
data in the generated MPEG Transport Stream. The relevant
|
||||
specification is available online as *SMPTE 302M-2007: Television -
|
||||
Mapping of AES3 Data into MPEG-2 Transport Stream*.
|
||||
|
||||
|
||||
The resulting MPEG Elementary Stream is conveyed in a private
|
||||
stream with a S302M registration descriptor attached.
|
||||
|
||||
This shall enable passing an audio signal into userspace so it can
|
||||
be decoded and played by media software. The corresponding decoder
|
||||
in ffmpeg is located in 'libavcodec/s302m.c' and is experimental.
|
||||
|
||||
vidtv_channel.[ch]
|
||||
Implements a 'channel' abstraction.
|
||||
|
||||
When vidtv boots, it will create some hardcoded channels:
|
||||
|
||||
#. Their services will be concatenated to populate the SDT.
|
||||
|
||||
#. Their programs will be concatenated to populate the PAT
|
||||
|
||||
#. For each program in the PAT, a PMT section will be created
|
||||
|
||||
#. The PMT section for a channel will be assigned its streams.
|
||||
|
||||
#. Every stream will have its corresponding encoder polled in a
|
||||
loop to produce TS packets.
|
||||
These packets may be interleaved by the muxer and then delivered
|
||||
to the bridge.
|
||||
|
||||
vidtv_mux.[ch]
|
||||
Implements a MPEG TS mux, loosely based on the ffmpeg
|
||||
implementation in "libavcodec/mpegtsenc.c"
|
||||
|
||||
The muxer runs a loop which is responsible for:
|
||||
|
||||
#. Keeping track of the amount of time elapsed since the last
|
||||
iteration.
|
||||
|
||||
#. Polling encoders in order to fetch 'elapsed_time' worth of data.
|
||||
|
||||
#. Inserting PSI and/or PCR packets, if needed.
|
||||
|
||||
#. Padding the resulting stream with NULL packets if
|
||||
necessary in order to maintain the chosen bit rate.
|
||||
|
||||
#. Delivering the resulting TS packets to the bridge
|
||||
driver so it can pass them to the demux.
|
||||
|
||||
Testing vidtv with v4l-utils
|
||||
----------------------------
|
||||
|
||||
Using the tools in v4l-utils is a great way to test and inspect the output of
|
||||
vidtv. It is hosted here: `v4l-utils Documentation
|
||||
<https://linuxtv.org/wiki/index.php/V4l-utils>`_.
|
||||
|
||||
From its webpage::
|
||||
|
||||
The v4l-utils are a series of packages for handling media devices.
|
||||
|
||||
It is hosted at http://git.linuxtv.org/v4l-utils.git, and packaged
|
||||
on most distributions.
|
||||
|
||||
It provides a series of libraries and utilities to be used to
|
||||
control several aspect of the media boards.
|
||||
|
||||
|
||||
Start by installing v4l-utils and then modprobing vidtv::
|
||||
|
||||
modprobe dvb_vidtv_bridge
|
||||
|
||||
If the driver is OK, it should load and its probing code will run. This will
|
||||
pull in the tuner and demod drivers.
|
||||
|
||||
Using dvb-fe-tool
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
The first step to check whether the demod loaded successfully is to run::
|
||||
|
||||
$ dvb-fe-tool
|
||||
|
||||
This should return what is currently set up at the demod struct, i.e.::
|
||||
|
||||
static const struct dvb_frontend_ops vidtv_demod_ops = {
|
||||
.delsys = {
|
||||
SYS_DVBT,
|
||||
SYS_DVBT2,
|
||||
SYS_DVBC_ANNEX_A,
|
||||
SYS_DVBS,
|
||||
SYS_DVBS2,
|
||||
},
|
||||
|
||||
.info = {
|
||||
.name = "Dummy demod for DVB-T/T2/C/S/S2",
|
||||
.frequency_min_hz = 51 * MHz,
|
||||
.frequency_max_hz = 2150 * MHz,
|
||||
.frequency_stepsize_hz = 62500,
|
||||
.frequency_tolerance_hz = 29500 * kHz,
|
||||
.symbol_rate_min = 1000000,
|
||||
.symbol_rate_max = 45000000,
|
||||
|
||||
.caps = FE_CAN_FEC_1_2 |
|
||||
FE_CAN_FEC_2_3 |
|
||||
FE_CAN_FEC_3_4 |
|
||||
FE_CAN_FEC_4_5 |
|
||||
FE_CAN_FEC_5_6 |
|
||||
FE_CAN_FEC_6_7 |
|
||||
FE_CAN_FEC_7_8 |
|
||||
FE_CAN_FEC_8_9 |
|
||||
FE_CAN_QAM_16 |
|
||||
FE_CAN_QAM_64 |
|
||||
FE_CAN_QAM_32 |
|
||||
FE_CAN_QAM_128 |
|
||||
FE_CAN_QAM_256 |
|
||||
FE_CAN_QAM_AUTO |
|
||||
FE_CAN_QPSK |
|
||||
FE_CAN_FEC_AUTO |
|
||||
FE_CAN_INVERSION_AUTO |
|
||||
FE_CAN_TRANSMISSION_MODE_AUTO |
|
||||
FE_CAN_GUARD_INTERVAL_AUTO |
|
||||
FE_CAN_HIERARCHY_AUTO,
|
||||
}
|
||||
|
||||
....
|
||||
|
||||
For more information on dvb-fe-tools check its online documentation here:
|
||||
`dvb-fe-tool Documentation
|
||||
<https://www.linuxtv.org/wiki/index.php/Dvb-fe-tool>`_.
|
||||
|
||||
Using dvb-scan
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
In order to tune into a channel and read the PSI tables, we can use dvb-scan.
|
||||
|
||||
For this, one should provide a configuration file known as a 'scan file',
|
||||
here's an example::
|
||||
|
||||
[Channel]
|
||||
FREQUENCY = 330000000
|
||||
MODULATION = QAM/AUTO
|
||||
SYMBOL_RATE = 6940000
|
||||
INNER_FEC = AUTO
|
||||
DELIVERY_SYSTEM = DVBC/ANNEX_A
|
||||
|
||||
.. note::
|
||||
The parameters depend on the video standard you're testing.
|
||||
|
||||
.. note::
|
||||
Vidtv is a fake driver and does not validate much of the information
|
||||
in the scan file. Just specifying 'FREQUENCY' and 'DELIVERY_SYSTEM'
|
||||
should be enough for DVB-T/DVB-T2. For DVB-S/DVB-C however, you
|
||||
should also provide 'SYMBOL_RATE'.
|
||||
|
||||
You can browse scan tables online here: `dvb-scan-tables
|
||||
<https://git.linuxtv.org/dtv-scan-tables.git>`_.
|
||||
|
||||
Assuming this channel is named 'channel.conf', you can then run::
|
||||
|
||||
$ dvbv5-scan channel.conf
|
||||
|
||||
For more information on dvb-scan, check its documentation online here:
|
||||
`dvb-scan Documentation <https://www.linuxtv.org/wiki/index.php/Dvbscan>`_.
|
||||
|
||||
Using dvb-zap
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
dvbv5-zap is a command line tool that can be used to record MPEG-TS to disk. The
|
||||
typical use is to tune into a channel and put it into record mode. The example
|
||||
below - which is taken from the documentation - illustrates that::
|
||||
|
||||
$ dvbv5-zap -c dvb_channel.conf "trilhas sonoras" -r
|
||||
using demux '/dev/dvb/adapter0/demux0'
|
||||
reading channels from file 'dvb_channel.conf'
|
||||
service has pid type 05: 204
|
||||
tuning to 573000000 Hz
|
||||
audio pid 104
|
||||
dvb_set_pesfilter 104
|
||||
Lock (0x1f) Quality= Good Signal= 100.00% C/N= -13.80dB UCB= 70 postBER= 3.14x10^-3 PER= 0
|
||||
DVR interface '/dev/dvb/adapter0/dvr0' can now be opened
|
||||
|
||||
The channel can be watched by playing the contents of the DVR interface, with
|
||||
some player that recognizes the MPEG-TS format, such as *mplayer* or *vlc*.
|
||||
|
||||
By playing the contents of the stream one can visually inspect the workings of
|
||||
vidtv, e.g.::
|
||||
|
||||
$ mplayer /dev/dvb/adapter0/dvr0
|
||||
|
||||
For more information on dvb-zap check its online documentation here:
|
||||
`dvb-zap Documentation
|
||||
<https://www.linuxtv.org/wiki/index.php/Dvbv5-zap>`_.
|
||||
See also: `zap <https://www.linuxtv.org/wiki/index.php/Zap>`_.
|
||||
|
||||
|
||||
What can still be improved in vidtv
|
||||
-----------------------------------
|
||||
|
||||
Add *debugfs* integration
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Although frontend drivers provide DVBv5 statistics via the .read_status
|
||||
call, a nice addition would be to make additional statistics available to
|
||||
userspace via debugfs, which is a simple-to-use, RAM-based filesystem
|
||||
specifically designed for debug purposes.
|
||||
|
||||
The logic for this would be implemented on a separate file so as not to
|
||||
pollute the frontend driver. These statistics are driver-specific and can
|
||||
be useful during tests.
|
||||
|
||||
The Siano driver is one example of a driver using
|
||||
debugfs to convey driver-specific statistics to userspace and it can be
|
||||
used as a reference.
|
||||
|
||||
This should be further enabled and disabled via a Kconfig
|
||||
option for convenience.
|
||||
|
||||
Add a way to test video
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Currently, vidtv can only encode PCM audio. It would be great to implement
|
||||
a barebones version of MPEG-2 video encoding so we can also test video. The
|
||||
first place to look into is *ISO 13818-2: Information technology — Generic
|
||||
coding of moving pictures and associated audio information — Part 2: Video*,
|
||||
which covers the encoding of compressed video in MPEG Transport Streams.
|
||||
|
||||
This might optionally use the Video4Linux2 Test Pattern Generator, v4l2-tpg,
|
||||
which resides at::
|
||||
|
||||
drivers/media/common/v4l2-tpg/
|
||||
|
||||
|
||||
Add white noise simulation
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The vidtv tuner already has code to identify whether the chosen frequency
|
||||
is too far away from a table of valid frequencies. For now, this means that
|
||||
the demodulator can eventually lose the lock on the signal, since the tuner will
|
||||
report a bad signal quality.
|
||||
|
||||
A nice addition is to simulate some noise when the signal quality is bad by:
|
||||
|
||||
- Randomly dropping some TS packets. This will trigger a continuity error if the
|
||||
continuity counter is updated but the packet is not passed on to the demux.
|
||||
|
||||
- Updating the error statistics accordingly (e.g. BER, etc).
|
||||
|
||||
- Simulating some noise in the encoded data.
|
575
Documentation/driver-api/media/drivers/zoran.rst
Normal file
575
Documentation/driver-api/media/drivers/zoran.rst
Normal file
|
@ -0,0 +1,575 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
The Zoran driver
|
||||
================
|
||||
|
||||
unified zoran driver (zr360x7, zoran, buz, dc10(+), dc30(+), lml33)
|
||||
|
||||
website: http://mjpeg.sourceforge.net/driver-zoran/
|
||||
|
||||
|
||||
Frequently Asked Questions
|
||||
--------------------------
|
||||
|
||||
What cards are supported
|
||||
------------------------
|
||||
|
||||
Iomega Buz, Linux Media Labs LML33/LML33R10, Pinnacle/Miro
|
||||
DC10/DC10+/DC30/DC30+ and related boards (available under various names).
|
||||
|
||||
Iomega Buz
|
||||
~~~~~~~~~~
|
||||
|
||||
* Zoran zr36067 PCI controller
|
||||
* Zoran zr36060 MJPEG codec
|
||||
* Philips saa7111 TV decoder
|
||||
* Philips saa7185 TV encoder
|
||||
|
||||
Drivers to use: videodev, i2c-core, i2c-algo-bit,
|
||||
videocodec, saa7111, saa7185, zr36060, zr36067
|
||||
|
||||
Inputs/outputs: Composite and S-video
|
||||
|
||||
Norms: PAL, SECAM (720x576 @ 25 fps), NTSC (720x480 @ 29.97 fps)
|
||||
|
||||
Card number: 7
|
||||
|
||||
AverMedia 6 Eyes AVS6EYES
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
* Zoran zr36067 PCI controller
|
||||
* Zoran zr36060 MJPEG codec
|
||||
* Samsung ks0127 TV decoder
|
||||
* Conexant bt866 TV encoder
|
||||
|
||||
Drivers to use: videodev, i2c-core, i2c-algo-bit,
|
||||
videocodec, ks0127, bt866, zr36060, zr36067
|
||||
|
||||
Inputs/outputs:
|
||||
Six physical inputs. 1-6 are composite,
|
||||
1-2, 3-4, 5-6 doubles as S-video,
|
||||
1-3 triples as component.
|
||||
One composite output.
|
||||
|
||||
Norms: PAL, SECAM (720x576 @ 25 fps), NTSC (720x480 @ 29.97 fps)
|
||||
|
||||
Card number: 8
|
||||
|
||||
.. note::
|
||||
|
||||
Not autodetected, card=8 is necessary.
|
||||
|
||||
Linux Media Labs LML33
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
* Zoran zr36067 PCI controller
|
||||
* Zoran zr36060 MJPEG codec
|
||||
* Brooktree bt819 TV decoder
|
||||
* Brooktree bt856 TV encoder
|
||||
|
||||
Drivers to use: videodev, i2c-core, i2c-algo-bit,
|
||||
videocodec, bt819, bt856, zr36060, zr36067
|
||||
|
||||
Inputs/outputs: Composite and S-video
|
||||
|
||||
Norms: PAL (720x576 @ 25 fps), NTSC (720x480 @ 29.97 fps)
|
||||
|
||||
Card number: 5
|
||||
|
||||
Linux Media Labs LML33R10
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
* Zoran zr36067 PCI controller
|
||||
* Zoran zr36060 MJPEG codec
|
||||
* Philips saa7114 TV decoder
|
||||
* Analog Devices adv7170 TV encoder
|
||||
|
||||
Drivers to use: videodev, i2c-core, i2c-algo-bit,
|
||||
videocodec, saa7114, adv7170, zr36060, zr36067
|
||||
|
||||
Inputs/outputs: Composite and S-video
|
||||
|
||||
Norms: PAL (720x576 @ 25 fps), NTSC (720x480 @ 29.97 fps)
|
||||
|
||||
Card number: 6
|
||||
|
||||
Pinnacle/Miro DC10(new)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
* Zoran zr36057 PCI controller
|
||||
* Zoran zr36060 MJPEG codec
|
||||
* Philips saa7110a TV decoder
|
||||
* Analog Devices adv7176 TV encoder
|
||||
|
||||
Drivers to use: videodev, i2c-core, i2c-algo-bit,
|
||||
videocodec, saa7110, adv7175, zr36060, zr36067
|
||||
|
||||
Inputs/outputs: Composite, S-video and Internal
|
||||
|
||||
Norms: PAL, SECAM (768x576 @ 25 fps), NTSC (640x480 @ 29.97 fps)
|
||||
|
||||
Card number: 1
|
||||
|
||||
Pinnacle/Miro DC10+
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
* Zoran zr36067 PCI controller
|
||||
* Zoran zr36060 MJPEG codec
|
||||
* Philips saa7110a TV decoder
|
||||
* Analog Devices adv7176 TV encoder
|
||||
|
||||
Drivers to use: videodev, i2c-core, i2c-algo-bit,
|
||||
videocodec, saa7110, adv7175, zr36060, zr36067
|
||||
|
||||
Inputs/outputs: Composite, S-video and Internal
|
||||
|
||||
Norms: PAL, SECAM (768x576 @ 25 fps), NTSC (640x480 @ 29.97 fps)
|
||||
|
||||
Card number: 2
|
||||
|
||||
Pinnacle/Miro DC10(old)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
* Zoran zr36057 PCI controller
|
||||
* Zoran zr36050 MJPEG codec
|
||||
* Zoran zr36016 Video Front End or Fuji md0211 Video Front End (clone?)
|
||||
* Micronas vpx3220a TV decoder
|
||||
* mse3000 TV encoder or Analog Devices adv7176 TV encoder
|
||||
|
||||
Drivers to use: videodev, i2c-core, i2c-algo-bit,
|
||||
videocodec, vpx3220, mse3000/adv7175, zr36050, zr36016, zr36067
|
||||
|
||||
Inputs/outputs: Composite, S-video and Internal
|
||||
|
||||
Norms: PAL, SECAM (768x576 @ 25 fps), NTSC (640x480 @ 29.97 fps)
|
||||
|
||||
Card number: 0
|
||||
|
||||
Pinnacle/Miro DC30
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
* Zoran zr36057 PCI controller
|
||||
* Zoran zr36050 MJPEG codec
|
||||
* Zoran zr36016 Video Front End
|
||||
* Micronas vpx3225d/vpx3220a/vpx3216b TV decoder
|
||||
* Analog Devices adv7176 TV encoder
|
||||
|
||||
Drivers to use: videodev, i2c-core, i2c-algo-bit,
|
||||
videocodec, vpx3220/vpx3224, adv7175, zr36050, zr36016, zr36067
|
||||
|
||||
Inputs/outputs: Composite, S-video and Internal
|
||||
|
||||
Norms: PAL, SECAM (768x576 @ 25 fps), NTSC (640x480 @ 29.97 fps)
|
||||
|
||||
Card number: 3
|
||||
|
||||
Pinnacle/Miro DC30+
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
* Zoran zr36067 PCI controller
|
||||
* Zoran zr36050 MJPEG codec
|
||||
* Zoran zr36016 Video Front End
|
||||
* Micronas vpx3225d/vpx3220a/vpx3216b TV decoder
|
||||
* Analog Devices adv7176 TV encoder
|
||||
|
||||
Drivers to use: videodev, i2c-core, i2c-algo-bit,
|
||||
videocodec, vpx3220/vpx3224, adv7175, zr36050, zr36015, zr36067
|
||||
|
||||
Inputs/outputs: Composite, S-video and Internal
|
||||
|
||||
Norms: PAL, SECAM (768x576 @ 25 fps), NTSC (640x480 @ 29.97 fps)
|
||||
|
||||
Card number: 4
|
||||
|
||||
.. note::
|
||||
|
||||
#) No module for the mse3000 is available yet
|
||||
#) No module for the vpx3224 is available yet
|
||||
|
||||
1.1 What the TV decoder can do an what not
|
||||
------------------------------------------
|
||||
|
||||
The best know TV standards are NTSC/PAL/SECAM. but for decoding a frame that
|
||||
information is not enough. There are several formats of the TV standards.
|
||||
And not every TV decoder is able to handle every format. Also the every
|
||||
combination is supported by the driver. There are currently 11 different
|
||||
tv broadcast formats all aver the world.
|
||||
|
||||
The CCIR defines parameters needed for broadcasting the signal.
|
||||
The CCIR has defined different standards: A,B,D,E,F,G,D,H,I,K,K1,L,M,N,...
|
||||
The CCIR says not much about the colorsystem used !!!
|
||||
And talking about a colorsystem says not to much about how it is broadcast.
|
||||
|
||||
The CCIR standards A,E,F are not used any more.
|
||||
|
||||
When you speak about NTSC, you usually mean the standard: CCIR - M using
|
||||
the NTSC colorsystem which is used in the USA, Japan, Mexico, Canada
|
||||
and a few others.
|
||||
|
||||
When you talk about PAL, you usually mean: CCIR - B/G using the PAL
|
||||
colorsystem which is used in many Countries.
|
||||
|
||||
When you talk about SECAM, you mean: CCIR - L using the SECAM Colorsystem
|
||||
which is used in France, and a few others.
|
||||
|
||||
There the other version of SECAM, CCIR - D/K is used in Bulgaria, China,
|
||||
Slovakai, Hungary, Korea (Rep.), Poland, Rumania and a others.
|
||||
|
||||
The CCIR - H uses the PAL colorsystem (sometimes SECAM) and is used in
|
||||
Egypt, Libya, Sri Lanka, Syrain Arab. Rep.
|
||||
|
||||
The CCIR - I uses the PAL colorsystem, and is used in Great Britain, Hong Kong,
|
||||
Ireland, Nigeria, South Africa.
|
||||
|
||||
The CCIR - N uses the PAL colorsystem and PAL frame size but the NTSC framerate,
|
||||
and is used in Argentinia, Uruguay, an a few others
|
||||
|
||||
We do not talk about how the audio is broadcast !
|
||||
|
||||
A rather good sites about the TV standards are:
|
||||
http://www.sony.jp/support/
|
||||
http://info.electronicwerkstatt.de/bereiche/fernsehtechnik/frequenzen_und_normen/Fernsehnormen/
|
||||
and http://www.cabl.com/restaurant/channel.html
|
||||
|
||||
Other weird things around: NTSC 4.43 is a modificated NTSC, which is mainly
|
||||
used in PAL VCR's that are able to play back NTSC. PAL 60 seems to be the same
|
||||
as NTSC 4.43 . The Datasheets also talk about NTSC 44, It seems as if it would
|
||||
be the same as NTSC 4.43.
|
||||
NTSC Combs seems to be a decoder mode where the decoder uses a comb filter
|
||||
to split coma and luma instead of a Delay line.
|
||||
|
||||
But I did not defiantly find out what NTSC Comb is.
|
||||
|
||||
Philips saa7111 TV decoder
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- was introduced in 1997, is used in the BUZ and
|
||||
- can handle: PAL B/G/H/I, PAL N, PAL M, NTSC M, NTSC N, NTSC 4.43 and SECAM
|
||||
|
||||
Philips saa7110a TV decoder
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- was introduced in 1995, is used in the Pinnacle/Miro DC10(new), DC10+ and
|
||||
- can handle: PAL B/G, NTSC M and SECAM
|
||||
|
||||
Philips saa7114 TV decoder
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- was introduced in 2000, is used in the LML33R10 and
|
||||
- can handle: PAL B/G/D/H/I/N, PAL N, PAL M, NTSC M, NTSC 4.43 and SECAM
|
||||
|
||||
Brooktree bt819 TV decoder
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- was introduced in 1996, and is used in the LML33 and
|
||||
- can handle: PAL B/D/G/H/I, NTSC M
|
||||
|
||||
Micronas vpx3220a TV decoder
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- was introduced in 1996, is used in the DC30 and DC30+ and
|
||||
- can handle: PAL B/G/H/I, PAL N, PAL M, NTSC M, NTSC 44, PAL 60, SECAM,NTSC Comb
|
||||
|
||||
Samsung ks0127 TV decoder
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- is used in the AVS6EYES card and
|
||||
- can handle: NTSC-M/N/44, PAL-M/N/B/G/H/I/D/K/L and SECAM
|
||||
|
||||
|
||||
What the TV encoder can do an what not
|
||||
--------------------------------------
|
||||
|
||||
The TV encoder is doing the "same" as the decoder, but in the other direction.
|
||||
You feed them digital data and the generate a Composite or SVHS signal.
|
||||
For information about the colorsystems and TV norm take a look in the
|
||||
TV decoder section.
|
||||
|
||||
Philips saa7185 TV Encoder
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- was introduced in 1996, is used in the BUZ
|
||||
- can generate: PAL B/G, NTSC M
|
||||
|
||||
Brooktree bt856 TV Encoder
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- was introduced in 1994, is used in the LML33
|
||||
- can generate: PAL B/D/G/H/I/N, PAL M, NTSC M, PAL-N (Argentina)
|
||||
|
||||
Analog Devices adv7170 TV Encoder
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- was introduced in 2000, is used in the LML300R10
|
||||
- can generate: PAL B/D/G/H/I/N, PAL M, NTSC M, PAL 60
|
||||
|
||||
Analog Devices adv7175 TV Encoder
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- was introduced in 1996, is used in the DC10, DC10+, DC10 old, DC30, DC30+
|
||||
- can generate: PAL B/D/G/H/I/N, PAL M, NTSC M
|
||||
|
||||
ITT mse3000 TV encoder
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- was introduced in 1991, is used in the DC10 old
|
||||
- can generate: PAL , NTSC , SECAM
|
||||
|
||||
Conexant bt866 TV encoder
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- is used in AVS6EYES, and
|
||||
- can generate: NTSC/PAL, PALM, PALN
|
||||
|
||||
The adv717x, should be able to produce PAL N. But you find nothing PAL N
|
||||
specific in the registers. Seem that you have to reuse a other standard
|
||||
to generate PAL N, maybe it would work if you use the PAL M settings.
|
||||
|
||||
How do I get this damn thing to work
|
||||
------------------------------------
|
||||
|
||||
Load zr36067.o. If it can't autodetect your card, use the card=X insmod
|
||||
option with X being the card number as given in the previous section.
|
||||
To have more than one card, use card=X1[,X2[,X3,[X4[..]]]]
|
||||
|
||||
To automate this, add the following to your /etc/modprobe.d/zoran.conf:
|
||||
|
||||
options zr36067 card=X1[,X2[,X3[,X4[..]]]]
|
||||
alias char-major-81-0 zr36067
|
||||
|
||||
One thing to keep in mind is that this doesn't load zr36067.o itself yet. It
|
||||
just automates loading. If you start using xawtv, the device won't load on
|
||||
some systems, since you're trying to load modules as a user, which is not
|
||||
allowed ("permission denied"). A quick workaround is to add 'Load "v4l"' to
|
||||
XF86Config-4 when you use X by default, or to run 'v4l-conf -c <device>' in
|
||||
one of your startup scripts (normally rc.local) if you don't use X. Both
|
||||
make sure that the modules are loaded on startup, under the root account.
|
||||
|
||||
What mainboard should I use (or why doesn't my card work)
|
||||
---------------------------------------------------------
|
||||
|
||||
|
||||
<insert lousy disclaimer here>. In short: good=SiS/Intel, bad=VIA.
|
||||
|
||||
Experience tells us that people with a Buz, on average, have more problems
|
||||
than users with a DC10+/LML33. Also, it tells us that people owning a VIA-
|
||||
based mainboard (ktXXX, MVP3) have more problems than users with a mainboard
|
||||
based on a different chipset. Here's some notes from Andrew Stevens:
|
||||
|
||||
Here's my experience of using LML33 and Buz on various motherboards:
|
||||
|
||||
- VIA MVP3
|
||||
- Forget it. Pointless. Doesn't work.
|
||||
- Intel 430FX (Pentium 200)
|
||||
- LML33 perfect, Buz tolerable (3 or 4 frames dropped per movie)
|
||||
- Intel 440BX (early stepping)
|
||||
- LML33 tolerable. Buz starting to get annoying (6-10 frames/hour)
|
||||
- Intel 440BX (late stepping)
|
||||
- Buz tolerable, LML3 almost perfect (occasional single frame drops)
|
||||
- SiS735
|
||||
- LML33 perfect, Buz tolerable.
|
||||
- VIA KT133(*)
|
||||
- LML33 starting to get annoying, Buz poor enough that I have up.
|
||||
|
||||
- Both 440BX boards were dual CPU versions.
|
||||
|
||||
Bernhard Praschinger later added:
|
||||
|
||||
- AMD 751
|
||||
- Buz perfect-tolerable
|
||||
- AMD 760
|
||||
- Buz perfect-tolerable
|
||||
|
||||
In general, people on the user mailinglist won't give you much of a chance
|
||||
if you have a VIA-based motherboard. They may be cheap, but sometimes, you'd
|
||||
rather want to spend some more money on better boards. In general, VIA
|
||||
mainboard's IDE/PCI performance will also suck badly compared to others.
|
||||
You'll noticed the DC10+/DC30+ aren't mentioned anywhere in the overview.
|
||||
Basically, you can assume that if the Buz works, the LML33 will work too. If
|
||||
the LML33 works, the DC10+/DC30+ will work too. They're most tolerant to
|
||||
different mainboard chipsets from all of the supported cards.
|
||||
|
||||
If you experience timeouts during capture, buy a better mainboard or lower
|
||||
the quality/buffersize during capture (see 'Concerning buffer sizes, quality,
|
||||
output size etc.'). If it hangs, there's little we can do as of now. Check
|
||||
your IRQs and make sure the card has its own interrupts.
|
||||
|
||||
Programming interface
|
||||
---------------------
|
||||
|
||||
This driver conforms to video4linux2. Support for V4L1 and for the custom
|
||||
zoran ioctls has been removed in kernel 2.6.38.
|
||||
|
||||
For programming example, please, look at lavrec.c and lavplay.c code in
|
||||
the MJPEG-tools (http://mjpeg.sf.net/).
|
||||
|
||||
Additional notes for software developers:
|
||||
|
||||
The driver returns maxwidth and maxheight parameters according to
|
||||
the current TV standard (norm). Therefore, the software which
|
||||
communicates with the driver and "asks" for these parameters should
|
||||
first set the correct norm. Well, it seems logically correct: TV
|
||||
standard is "more constant" for current country than geometry
|
||||
settings of a variety of TV capture cards which may work in ITU or
|
||||
square pixel format.
|
||||
|
||||
Applications
|
||||
------------
|
||||
|
||||
Applications known to work with this driver:
|
||||
|
||||
TV viewing:
|
||||
|
||||
* xawtv
|
||||
* kwintv
|
||||
* probably any TV application that supports video4linux or video4linux2.
|
||||
|
||||
MJPEG capture/playback:
|
||||
|
||||
* mjpegtools/lavtools (or Linux Video Studio)
|
||||
* gstreamer
|
||||
* mplayer
|
||||
|
||||
General raw capture:
|
||||
|
||||
* xawtv
|
||||
* gstreamer
|
||||
* probably any application that supports video4linux or video4linux2
|
||||
|
||||
Video editing:
|
||||
|
||||
* Cinelerra
|
||||
* MainActor
|
||||
* mjpegtools (or Linux Video Studio)
|
||||
|
||||
|
||||
Concerning buffer sizes, quality, output size etc.
|
||||
--------------------------------------------------
|
||||
|
||||
|
||||
The zr36060 can do 1:2 JPEG compression. This is really the theoretical
|
||||
maximum that the chipset can reach. The driver can, however, limit compression
|
||||
to a maximum (size) of 1:4. The reason for this is that some cards (e.g. Buz)
|
||||
can't handle 1:2 compression without stopping capture after only a few minutes.
|
||||
With 1:4, it'll mostly work. If you have a Buz, use 'low_bitrate=1' to go into
|
||||
1:4 max. compression mode.
|
||||
|
||||
100% JPEG quality is thus 1:2 compression in practice. So for a full PAL frame
|
||||
(size 720x576). The JPEG fields are stored in YUY2 format, so the size of the
|
||||
fields are 720x288x16/2 bits/field (2 fields/frame) = 207360 bytes/field x 2 =
|
||||
414720 bytes/frame (add some more bytes for headers and DHT (huffman)/DQT
|
||||
(quantization) tables, and you'll get to something like 512kB per frame for
|
||||
1:2 compression. For 1:4 compression, you'd have frames of half this size.
|
||||
|
||||
Some additional explanation by Martin Samuelsson, which also explains the
|
||||
importance of buffer sizes:
|
||||
--
|
||||
> Hmm, I do not think it is really that way. With the current (downloaded
|
||||
> at 18:00 Monday) driver I get that output sizes for 10 sec:
|
||||
> -q 50 -b 128 : 24.283.332 Bytes
|
||||
> -q 50 -b 256 : 48.442.368
|
||||
> -q 25 -b 128 : 24.655.992
|
||||
> -q 25 -b 256 : 25.859.820
|
||||
|
||||
I woke up, and can't go to sleep again. I'll kill some time explaining why
|
||||
this doesn't look strange to me.
|
||||
|
||||
Let's do some math using a width of 704 pixels. I'm not sure whether the Buz
|
||||
actually use that number or not, but that's not too important right now.
|
||||
|
||||
704x288 pixels, one field, is 202752 pixels. Divided by 64 pixels per block;
|
||||
3168 blocks per field. Each pixel consist of two bytes; 128 bytes per block;
|
||||
1024 bits per block. 100% in the new driver mean 1:2 compression; the maximum
|
||||
output becomes 512 bits per block. Actually 510, but 512 is simpler to use
|
||||
for calculations.
|
||||
|
||||
Let's say that we specify d1q50. We thus want 256 bits per block; times 3168
|
||||
becomes 811008 bits; 101376 bytes per field. We're talking raw bits and bytes
|
||||
here, so we don't need to do any fancy corrections for bits-per-pixel or such
|
||||
things. 101376 bytes per field.
|
||||
|
||||
d1 video contains two fields per frame. Those sum up to 202752 bytes per
|
||||
frame, and one of those frames goes into each buffer.
|
||||
|
||||
But wait a second! -b128 gives 128kB buffers! It's not possible to cram
|
||||
202752 bytes of JPEG data into 128kB!
|
||||
|
||||
This is what the driver notice and automatically compensate for in your
|
||||
examples. Let's do some math using this information:
|
||||
|
||||
128kB is 131072 bytes. In this buffer, we want to store two fields, which
|
||||
leaves 65536 bytes for each field. Using 3168 blocks per field, we get
|
||||
20.68686868... available bytes per block; 165 bits. We can't allow the
|
||||
request for 256 bits per block when there's only 165 bits available! The -q50
|
||||
option is silently overridden, and the -b128 option takes precedence, leaving
|
||||
us with the equivalence of -q32.
|
||||
|
||||
This gives us a data rate of 165 bits per block, which, times 3168, sums up
|
||||
to 65340 bytes per field, out of the allowed 65536. The current driver has
|
||||
another level of rate limiting; it won't accept -q values that fill more than
|
||||
6/8 of the specified buffers. (I'm not sure why. "Playing it safe" seem to be
|
||||
a safe bet. Personally, I think I would have lowered requested-bits-per-block
|
||||
by one, or something like that.) We can't use 165 bits per block, but have to
|
||||
lower it again, to 6/8 of the available buffer space: We end up with 124 bits
|
||||
per block, the equivalence of -q24. With 128kB buffers, you can't use greater
|
||||
than -q24 at -d1. (And PAL, and 704 pixels width...)
|
||||
|
||||
The third example is limited to -q24 through the same process. The second
|
||||
example, using very similar calculations, is limited to -q48. The only
|
||||
example that actually grab at the specified -q value is the last one, which
|
||||
is clearly visible, looking at the file size.
|
||||
--
|
||||
|
||||
Conclusion: the quality of the resulting movie depends on buffer size, quality,
|
||||
whether or not you use 'low_bitrate=1' as insmod option for the zr36060.c
|
||||
module to do 1:4 instead of 1:2 compression, etc.
|
||||
|
||||
If you experience timeouts, lowering the quality/buffersize or using
|
||||
'low_bitrate=1 as insmod option for zr36060.o might actually help, as is
|
||||
proven by the Buz.
|
||||
|
||||
It hangs/crashes/fails/whatevers! Help!
|
||||
---------------------------------------
|
||||
|
||||
Make sure that the card has its own interrupts (see /proc/interrupts), check
|
||||
the output of dmesg at high verbosity (load zr36067.o with debug=2,
|
||||
load all other modules with debug=1). Check that your mainboard is favorable
|
||||
(see question 2) and if not, test the card in another computer. Also see the
|
||||
notes given in question 3 and try lowering quality/buffersize/capturesize
|
||||
if recording fails after a period of time.
|
||||
|
||||
If all this doesn't help, give a clear description of the problem including
|
||||
detailed hardware information (memory+brand, mainboard+chipset+brand, which
|
||||
MJPEG card, processor, other PCI cards that might be of interest), give the
|
||||
system PnP information (/proc/interrupts, /proc/dma, /proc/devices), and give
|
||||
the kernel version, driver version, glibc version, gcc version and any other
|
||||
information that might possibly be of interest. Also provide the dmesg output
|
||||
at high verbosity. See 'Contacting' on how to contact the developers.
|
||||
|
||||
Maintainers/Contacting
|
||||
----------------------
|
||||
|
||||
Previous maintainers/developers of this driver are
|
||||
- Laurent Pinchart <laurent.pinchart@skynet.be>
|
||||
- Ronald Bultje rbultje@ronald.bitfreak.net
|
||||
- Serguei Miridonov <mirsev@cicese.mx>
|
||||
- Wolfgang Scherr <scherr@net4you.net>
|
||||
- Dave Perks <dperks@ibm.net>
|
||||
- Rainer Johanni <Rainer@Johanni.de>
|
||||
|
||||
Driver's License
|
||||
----------------
|
||||
|
||||
This driver is distributed under the terms of the General Public License.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
See http://www.gnu.org/ for more information.
|
|
@ -34,6 +34,7 @@ Please see:
|
|||
mc-core
|
||||
cec-core
|
||||
csi2
|
||||
camera-sensor
|
||||
|
||||
drivers/index
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@ provides host private data for that purpose that can be accessed with
|
|||
From the bridge driver perspective, you load the sub-device module and somehow
|
||||
obtain the :c:type:`v4l2_subdev` pointer. For i2c devices this is easy: you call
|
||||
``i2c_get_clientdata()``. For other buses something similar needs to be done.
|
||||
Helper functions exists for sub-devices on an I2C bus that do most of this
|
||||
Helper functions exist for sub-devices on an I2C bus that do most of this
|
||||
tricky work for you.
|
||||
|
||||
Each :c:type:`v4l2_subdev` contains function pointers that sub-device drivers
|
||||
|
@ -138,6 +138,9 @@ ensures that width, height and the media bus pixel code are equal on both source
|
|||
and sink of the link. Subdev drivers are also free to use this function to
|
||||
perform the checks mentioned above in addition to their own checks.
|
||||
|
||||
Subdev registration
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
There are currently two ways to register subdevices with the V4L2 core. The
|
||||
first (traditional) possibility is to have subdevices registered by bridge
|
||||
drivers. This can be done when the bridge driver has the complete information
|
||||
|
@ -157,7 +160,7 @@ below.
|
|||
Using one or the other registration method only affects the probing process, the
|
||||
run-time bridge-subdevice interaction is in both cases the same.
|
||||
|
||||
In the synchronous case a device (bridge) driver needs to register the
|
||||
In the **synchronous** case a device (bridge) driver needs to register the
|
||||
:c:type:`v4l2_subdev` with the v4l2_device:
|
||||
|
||||
:c:func:`v4l2_device_register_subdev <v4l2_device_register_subdev>`
|
||||
|
@ -179,7 +182,51 @@ You can unregister a sub-device using:
|
|||
Afterwards the subdev module can be unloaded and
|
||||
:c:type:`sd <v4l2_subdev>`->dev == ``NULL``.
|
||||
|
||||
You can call an ops function either directly:
|
||||
In the **asynchronous** case subdevice probing can be invoked independently of
|
||||
the bridge driver availability. The subdevice driver then has to verify whether
|
||||
all the requirements for a successful probing are satisfied. This can include a
|
||||
check for a master clock availability. If any of the conditions aren't satisfied
|
||||
the driver might decide to return ``-EPROBE_DEFER`` to request further reprobing
|
||||
attempts. Once all conditions are met the subdevice shall be registered using
|
||||
the :c:func:`v4l2_async_register_subdev` function. Unregistration is
|
||||
performed using the :c:func:`v4l2_async_unregister_subdev` call. Subdevices
|
||||
registered this way are stored in a global list of subdevices, ready to be
|
||||
picked up by bridge drivers.
|
||||
|
||||
Bridge drivers in turn have to register a notifier object. This is
|
||||
performed using the :c:func:`v4l2_async_notifier_register` call. To
|
||||
unregister the notifier the driver has to call
|
||||
:c:func:`v4l2_async_notifier_unregister`. The former of the two functions
|
||||
takes two arguments: a pointer to struct :c:type:`v4l2_device` and a
|
||||
pointer to struct :c:type:`v4l2_async_notifier`.
|
||||
|
||||
Before registering the notifier, bridge drivers must do two things:
|
||||
first, the notifier must be initialized using the
|
||||
:c:func:`v4l2_async_notifier_init`. Second, bridge drivers can then
|
||||
begin to form a list of subdevice descriptors that the bridge device
|
||||
needs for its operation. Subdevice descriptors are added to the notifier
|
||||
using the :c:func:`v4l2_async_notifier_add_subdev` call. This function
|
||||
takes two arguments: a pointer to struct :c:type:`v4l2_async_notifier`,
|
||||
and a pointer to the subdevice descripter, which is of type struct
|
||||
:c:type:`v4l2_async_subdev`.
|
||||
|
||||
The V4L2 core will then use these descriptors to match asynchronously
|
||||
registered subdevices to them. If a match is detected the ``.bound()``
|
||||
notifier callback is called. After all subdevices have been located the
|
||||
.complete() callback is called. When a subdevice is removed from the
|
||||
system the .unbind() method is called. All three callbacks are optional.
|
||||
|
||||
Calling subdev operations
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The advantage of using :c:type:`v4l2_subdev` is that it is a generic struct and
|
||||
does not contain any knowledge about the underlying hardware. So a driver might
|
||||
contain several subdevs that use an I2C bus, but also a subdev that is
|
||||
controlled through GPIO pins. This distinction is only relevant when setting
|
||||
up the device, but once the subdev is registered it is completely transparent.
|
||||
|
||||
Once te subdev has been registered you can call an ops function either
|
||||
directly:
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
|
@ -191,7 +238,7 @@ but it is better and easier to use this macro:
|
|||
|
||||
err = v4l2_subdev_call(sd, core, g_std, &norm);
|
||||
|
||||
The macro will to the right ``NULL`` pointer checks and returns ``-ENODEV``
|
||||
The macro will do the right ``NULL`` pointer checks and returns ``-ENODEV``
|
||||
if :c:type:`sd <v4l2_subdev>` is ``NULL``, ``-ENOIOCTLCMD`` if either
|
||||
:c:type:`sd <v4l2_subdev>`->core or :c:type:`sd <v4l2_subdev>`->core->g_std is ``NULL``, or the actual result of the
|
||||
:c:type:`sd <v4l2_subdev>`->ops->core->g_std ops.
|
||||
|
@ -232,46 +279,6 @@ it can call ``v4l2_subdev_notify(sd, notification, arg)``. This macro checks
|
|||
whether there is a ``notify()`` callback defined and returns ``-ENODEV`` if not.
|
||||
Otherwise the result of the ``notify()`` call is returned.
|
||||
|
||||
The advantage of using :c:type:`v4l2_subdev` is that it is a generic struct and
|
||||
does not contain any knowledge about the underlying hardware. So a driver might
|
||||
contain several subdevs that use an I2C bus, but also a subdev that is
|
||||
controlled through GPIO pins. This distinction is only relevant when setting
|
||||
up the device, but once the subdev is registered it is completely transparent.
|
||||
|
||||
In the asynchronous case subdevice probing can be invoked independently of the
|
||||
bridge driver availability. The subdevice driver then has to verify whether all
|
||||
the requirements for a successful probing are satisfied. This can include a
|
||||
check for a master clock availability. If any of the conditions aren't satisfied
|
||||
the driver might decide to return ``-EPROBE_DEFER`` to request further reprobing
|
||||
attempts. Once all conditions are met the subdevice shall be registered using
|
||||
the :c:func:`v4l2_async_register_subdev` function. Unregistration is
|
||||
performed using the :c:func:`v4l2_async_unregister_subdev` call. Subdevices
|
||||
registered this way are stored in a global list of subdevices, ready to be
|
||||
picked up by bridge drivers.
|
||||
|
||||
Bridge drivers in turn have to register a notifier object. This is
|
||||
performed using the :c:func:`v4l2_async_notifier_register` call. To
|
||||
unregister the notifier the driver has to call
|
||||
:c:func:`v4l2_async_notifier_unregister`. The former of the two functions
|
||||
takes two arguments: a pointer to struct :c:type:`v4l2_device` and a
|
||||
pointer to struct :c:type:`v4l2_async_notifier`.
|
||||
|
||||
Before registering the notifier, bridge drivers must do two things:
|
||||
first, the notifier must be initialized using the
|
||||
:c:func:`v4l2_async_notifier_init`. Second, bridge drivers can then
|
||||
begin to form a list of subdevice descriptors that the bridge device
|
||||
needs for its operation. Subdevice descriptors are added to the notifier
|
||||
using the :c:func:`v4l2_async_notifier_add_subdev` call. This function
|
||||
takes two arguments: a pointer to struct :c:type:`v4l2_async_notifier`,
|
||||
and a pointer to the subdevice descripter, which is of type struct
|
||||
:c:type:`v4l2_async_subdev`.
|
||||
|
||||
The V4L2 core will then use these descriptors to match asynchronously
|
||||
registered subdevices to them. If a match is detected the ``.bound()``
|
||||
notifier callback is called. After all subdevices have been located the
|
||||
.complete() callback is called. When a subdevice is removed from the
|
||||
system the .unbind() method is called. All three callbacks are optional.
|
||||
|
||||
V4L2 sub-device userspace API
|
||||
-----------------------------
|
||||
|
||||
|
@ -488,5 +495,3 @@ V4L2 sub-device functions and data structures
|
|||
---------------------------------------------
|
||||
|
||||
.. kernel-doc:: include/media/v4l2-subdev.h
|
||||
|
||||
.. kernel-doc:: include/media/v4l2-async.h
|
||||
|
|
|
@ -1,12 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
.. include:: <isonum.txt>
|
||||
|
||||
.. _cec:
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _cec-func-close:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _cec-func-ioctl:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _cec-func-open:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _cec-func-poll:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _cec-user-func:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _cec_header:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _cec-intro:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _CEC_ADAP_G_CAPS:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _CEC_ADAP_LOG_ADDRS:
|
||||
.. _CEC_ADAP_G_LOG_ADDRS:
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _CEC_ADAP_PHYS_ADDR:
|
||||
.. _CEC_ADAP_G_PHYS_ADDR:
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _CEC_DQEVENT:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _CEC_MODE:
|
||||
.. _CEC_G_MODE:
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _CEC_TRANSMIT:
|
||||
.. _CEC_RECEIVE:
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
CEC Pin Framework Error Injection
|
||||
=================================
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _AUDIO_BILINGUAL_CHANNEL_SELECT:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _AUDIO_CHANNEL_SELECT:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _AUDIO_CLEAR_BUFFER:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _AUDIO_CONTINUE:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _audio_fclose:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _audio_fopen:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _audio_fwrite:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _AUDIO_GET_CAPABILITIES:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _AUDIO_GET_STATUS:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _AUDIO_PAUSE:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _AUDIO_PLAY:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _AUDIO_SELECT_SOURCE:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _AUDIO_SET_AV_SYNC:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _AUDIO_SET_BYPASS_MODE:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _AUDIO_SET_ID:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _AUDIO_SET_MIXER:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _AUDIO_SET_MUTE:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _AUDIO_SET_STREAMTYPE:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _AUDIO_STOP:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _dvb_audio:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _audio_data_types:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _audio_function_calls:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _ca_fclose:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _ca_fopen:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _CA_GET_CAP:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _CA_GET_DESCR_INFO:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _CA_GET_MSG:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _CA_GET_SLOT_INFO:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _CA_RESET:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _CA_SEND_MSG:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _CA_SET_DESCR:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _dvb_ca:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _ca_data_types:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _ca_function_calls:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _dvb_demux:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _DMX_ADD_PID:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _DMX_EXPBUF:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _dmx_fclose:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _dmx_fopen:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _dmx_fread:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _dmx_fwrite:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _DMX_GET_PES_PIDS:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _DMX_GET_STC:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _dmx-mmap:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _dmx-munmap:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _DMX_QBUF:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _DMX_QUERYBUF:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _DMX_REMOVE_PID:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _DMX_REQBUFS:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _DMX_SET_BUFFER_SIZE:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _DMX_SET_FILTER:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _DMX_SET_PES_FILTER:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _DMX_START:
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
.. Permission is granted to copy, distribute and/or modify this
|
||||
.. document under the terms of the GNU Free Documentation License,
|
||||
.. Version 1.1 or any later version published by the Free Software
|
||||
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/userspace-api/media/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _DMX_STOP:
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user