Merge tag 'irqchip-4.9-1' of git://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms into irq/core
Merge the first drop of irqchip updates for 4.9 from Marc Zyngier: - ACPI IORT core code - IORT support for the GICv3 ITS - A few of GIC cleanups
This commit is contained in:
3
.cocciconfig
Normal file
3
.cocciconfig
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[spatch]
|
||||||
|
options = --timeout 200
|
||||||
|
options = --use-gitgrep
|
||||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -37,6 +37,7 @@ modules.builtin
|
|||||||
Module.symvers
|
Module.symvers
|
||||||
*.dwo
|
*.dwo
|
||||||
*.su
|
*.su
|
||||||
|
*.c.[012]*.*
|
||||||
|
|
||||||
#
|
#
|
||||||
# Top-level generic files
|
# Top-level generic files
|
||||||
@@ -66,6 +67,7 @@ Module.symvers
|
|||||||
#
|
#
|
||||||
!.gitignore
|
!.gitignore
|
||||||
!.mailmap
|
!.mailmap
|
||||||
|
!.cocciconfig
|
||||||
|
|
||||||
#
|
#
|
||||||
# Generated include files
|
# Generated include files
|
||||||
|
|||||||
21
.mailmap
21
.mailmap
@@ -11,6 +11,7 @@ Aaron Durbin <adurbin@google.com>
|
|||||||
Adam Oldham <oldhamca@gmail.com>
|
Adam Oldham <oldhamca@gmail.com>
|
||||||
Adam Radford <aradford@gmail.com>
|
Adam Radford <aradford@gmail.com>
|
||||||
Adrian Bunk <bunk@stusta.de>
|
Adrian Bunk <bunk@stusta.de>
|
||||||
|
Adriana Reus <adi.reus@gmail.com> <adriana.reus@intel.com>
|
||||||
Alan Cox <alan@lxorguk.ukuu.org.uk>
|
Alan Cox <alan@lxorguk.ukuu.org.uk>
|
||||||
Alan Cox <root@hraefn.swansea.linux.org.uk>
|
Alan Cox <root@hraefn.swansea.linux.org.uk>
|
||||||
Aleksey Gorelov <aleksey_gorelov@phoenix.com>
|
Aleksey Gorelov <aleksey_gorelov@phoenix.com>
|
||||||
@@ -87,13 +88,24 @@ Kay Sievers <kay.sievers@vrfy.org>
|
|||||||
Kenneth W Chen <kenneth.w.chen@intel.com>
|
Kenneth W Chen <kenneth.w.chen@intel.com>
|
||||||
Konstantin Khlebnikov <koct9i@gmail.com> <k.khlebnikov@samsung.com>
|
Konstantin Khlebnikov <koct9i@gmail.com> <k.khlebnikov@samsung.com>
|
||||||
Koushik <raghavendra.koushik@neterion.com>
|
Koushik <raghavendra.koushik@neterion.com>
|
||||||
|
Krzysztof Kozlowski <krzk@kernel.org> <k.kozlowski@samsung.com>
|
||||||
Krzysztof Kozlowski <krzk@kernel.org> <k.kozlowski.k@gmail.com>
|
Krzysztof Kozlowski <krzk@kernel.org> <k.kozlowski.k@gmail.com>
|
||||||
Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
|
Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
|
||||||
Leonid I Ananiev <leonid.i.ananiev@intel.com>
|
Leonid I Ananiev <leonid.i.ananiev@intel.com>
|
||||||
Linas Vepstas <linas@austin.ibm.com>
|
Linas Vepstas <linas@austin.ibm.com>
|
||||||
|
Linus Lüssing <linus.luessing@c0d3.blue> <linus.luessing@web.de>
|
||||||
|
Linus Lüssing <linus.luessing@c0d3.blue> <linus.luessing@ascom.ch>
|
||||||
Mark Brown <broonie@sirena.org.uk>
|
Mark Brown <broonie@sirena.org.uk>
|
||||||
Matthieu CASTET <castet.matthieu@free.fr>
|
Matthieu CASTET <castet.matthieu@free.fr>
|
||||||
Mauro Carvalho Chehab <mchehab@kernel.org> <maurochehab@gmail.com> <mchehab@infradead.org> <mchehab@redhat.com> <m.chehab@samsung.com> <mchehab@osg.samsung.com> <mchehab@s-opensource.com>
|
Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@brturbo.com.br>
|
||||||
|
Mauro Carvalho Chehab <mchehab@kernel.org> <maurochehab@gmail.com>
|
||||||
|
Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@infradead.org>
|
||||||
|
Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@redhat.com>
|
||||||
|
Mauro Carvalho Chehab <mchehab@kernel.org> <m.chehab@samsung.com>
|
||||||
|
Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@osg.samsung.com>
|
||||||
|
Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@s-opensource.com>
|
||||||
|
Matt Ranostay <mranostay@gmail.com> Matthew Ranostay <mranostay@embeddedalley.com>
|
||||||
|
Matt Ranostay <mranostay@gmail.com> <matt.ranostay@intel.com>
|
||||||
Mayuresh Janorkar <mayur@ti.com>
|
Mayuresh Janorkar <mayur@ti.com>
|
||||||
Michael Buesch <m@bues.ch>
|
Michael Buesch <m@bues.ch>
|
||||||
Michel Dänzer <michel@tungstengraphics.com>
|
Michel Dänzer <michel@tungstengraphics.com>
|
||||||
@@ -127,7 +139,10 @@ Santosh Shilimkar <santosh.shilimkar@oracle.org>
|
|||||||
Sascha Hauer <s.hauer@pengutronix.de>
|
Sascha Hauer <s.hauer@pengutronix.de>
|
||||||
S.Çağlar Onur <caglar@pardus.org.tr>
|
S.Çağlar Onur <caglar@pardus.org.tr>
|
||||||
Shiraz Hashim <shiraz.linux.kernel@gmail.com> <shiraz.hashim@st.com>
|
Shiraz Hashim <shiraz.linux.kernel@gmail.com> <shiraz.hashim@st.com>
|
||||||
Shuah Khan <shuah@kernel.org> <shuahkhan@gmail.com> <shuah.khan@hp.com> <shuahkh@osg.samsung.com> <shuah.kh@samsung.com>
|
Shuah Khan <shuah@kernel.org> <shuahkhan@gmail.com>
|
||||||
|
Shuah Khan <shuah@kernel.org> <shuah.khan@hp.com>
|
||||||
|
Shuah Khan <shuah@kernel.org> <shuahkh@osg.samsung.com>
|
||||||
|
Shuah Khan <shuah@kernel.org> <shuah.kh@samsung.com>
|
||||||
Simon Kelley <simon@thekelleys.org.uk>
|
Simon Kelley <simon@thekelleys.org.uk>
|
||||||
Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr>
|
Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr>
|
||||||
Stephen Hemminger <shemminger@osdl.org>
|
Stephen Hemminger <shemminger@osdl.org>
|
||||||
@@ -144,6 +159,8 @@ Valdis Kletnieks <Valdis.Kletnieks@vt.edu>
|
|||||||
Viresh Kumar <vireshk@kernel.org> <viresh.kumar@st.com>
|
Viresh Kumar <vireshk@kernel.org> <viresh.kumar@st.com>
|
||||||
Viresh Kumar <vireshk@kernel.org> <viresh.linux@gmail.com>
|
Viresh Kumar <vireshk@kernel.org> <viresh.linux@gmail.com>
|
||||||
Viresh Kumar <vireshk@kernel.org> <viresh.kumar2@arm.com>
|
Viresh Kumar <vireshk@kernel.org> <viresh.kumar2@arm.com>
|
||||||
|
Vladimir Davydov <vdavydov.dev@gmail.com> <vdavydov@virtuozzo.com>
|
||||||
|
Vladimir Davydov <vdavydov.dev@gmail.com> <vdavydov@parallels.com>
|
||||||
Takashi YOSHII <takashi.yoshii.zj@renesas.com>
|
Takashi YOSHII <takashi.yoshii.zj@renesas.com>
|
||||||
Yusuke Goda <goda.yusuke@renesas.com>
|
Yusuke Goda <goda.yusuke@renesas.com>
|
||||||
Gustavo Padovan <gustavo@las.ic.unicamp.br>
|
Gustavo Padovan <gustavo@las.ic.unicamp.br>
|
||||||
|
|||||||
2
Documentation/.gitignore
vendored
Normal file
2
Documentation/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
output
|
||||||
|
*.pyc
|
||||||
@@ -255,10 +255,10 @@ kbuild/
|
|||||||
- directory with info about the kernel build process.
|
- directory with info about the kernel build process.
|
||||||
kdump/
|
kdump/
|
||||||
- directory with mini HowTo on getting the crash dump code to work.
|
- directory with mini HowTo on getting the crash dump code to work.
|
||||||
kernel-doc-nano-HOWTO.txt
|
|
||||||
- mini HowTo on generation and location of kernel documentation files.
|
|
||||||
kernel-docs.txt
|
kernel-docs.txt
|
||||||
- listing of various WWW + books that document kernel internals.
|
- listing of various WWW + books that document kernel internals.
|
||||||
|
kernel-documentation.rst
|
||||||
|
- how to write and format reStructuredText kernel documentation
|
||||||
kernel-parameters.txt
|
kernel-parameters.txt
|
||||||
- summary listing of command line / boot prompt args for the kernel.
|
- summary listing of command line / boot prompt args for the kernel.
|
||||||
kernel-per-CPU-kthreads.txt
|
kernel-per-CPU-kthreads.txt
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# Note: This documents additional properties of any device beyond what
|
# Note: This documents additional properties of any device beyond what
|
||||||
# is documented in Documentation/sysfs-rules.txt
|
# is documented in Documentation/sysfs-rules.txt
|
||||||
|
|
||||||
What: /sys/devices/*/of_path
|
What: /sys/devices/*/of_node
|
||||||
Date: February 2015
|
Date: February 2015
|
||||||
Contact: Device Tree mailing list <devicetree@vger.kernel.org>
|
Contact: Device Tree mailing list <devicetree@vger.kernel.org>
|
||||||
Description:
|
Description:
|
||||||
|
|||||||
36
Documentation/ABI/testing/configfs-acpi
Normal file
36
Documentation/ABI/testing/configfs-acpi
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
What: /config/acpi
|
||||||
|
Date: July 2016
|
||||||
|
KernelVersion: 4.8
|
||||||
|
Contact: linux-acpi@vger.kernel.org
|
||||||
|
Description:
|
||||||
|
This represents the ACPI subsystem entry point directory. It
|
||||||
|
contains sub-groups corresponding to ACPI configurable options.
|
||||||
|
|
||||||
|
What: /config/acpi/table
|
||||||
|
Date: July 2016
|
||||||
|
KernelVersion: 4.8
|
||||||
|
Description:
|
||||||
|
|
||||||
|
This group contains the configuration for user defined ACPI
|
||||||
|
tables. The attributes of a user define table are:
|
||||||
|
|
||||||
|
aml - a binary attribute that the user can use to
|
||||||
|
fill in the ACPI aml definitions. Once the aml
|
||||||
|
data is written to this file and the file is
|
||||||
|
closed the table will be loaded and ACPI devices
|
||||||
|
will be enumerated. To check if the operation is
|
||||||
|
successful the user must check the error code
|
||||||
|
for close(). If the operation is successful,
|
||||||
|
subsequent writes to this attribute will fail.
|
||||||
|
|
||||||
|
The rest of the attributes are read-only and are valid only
|
||||||
|
after the table has been loaded by filling the aml entry:
|
||||||
|
|
||||||
|
signature - ASCII table signature
|
||||||
|
length - length of table in bytes, including the header
|
||||||
|
revision - ACPI Specification minor version number
|
||||||
|
oem_id - ASCII OEM identification
|
||||||
|
oem_table_id - ASCII OEM table identification
|
||||||
|
oem_revision - OEM revision number
|
||||||
|
asl_compiler_id - ASCII ASL compiler vendor ID
|
||||||
|
asl_compiler_revision - ASL compiler version
|
||||||
@@ -19,3 +19,16 @@ KernelVersion: 4.4
|
|||||||
Description:
|
Description:
|
||||||
High resolution timers directory. Creating a directory here
|
High resolution timers directory. Creating a directory here
|
||||||
will result in creating a hrtimer trigger in the IIO subsystem.
|
will result in creating a hrtimer trigger in the IIO subsystem.
|
||||||
|
|
||||||
|
What: /config/iio/devices
|
||||||
|
Date: April 2016
|
||||||
|
KernelVersion: 4.7
|
||||||
|
Description:
|
||||||
|
Industrial IO software devices directory.
|
||||||
|
|
||||||
|
What: /config/iio/devices/dummy
|
||||||
|
Date: April 2016
|
||||||
|
KernelVersion: 4.7
|
||||||
|
Description:
|
||||||
|
Dummy IIO devices directory. Creating a directory here will result
|
||||||
|
in creating a dummy IIO device in the IIO subystem.
|
||||||
|
|||||||
@@ -32,6 +32,13 @@ Description:
|
|||||||
Description of the physical chip / device for device X.
|
Description of the physical chip / device for device X.
|
||||||
Typically a part number.
|
Typically a part number.
|
||||||
|
|
||||||
|
What: /sys/bus/iio/devices/iio:deviceX/timestamp_clock
|
||||||
|
KernelVersion: 4.5
|
||||||
|
Contact: linux-iio@vger.kernel.org
|
||||||
|
Description:
|
||||||
|
String identifying current posix clock used to timestamp
|
||||||
|
buffered samples and events for device X.
|
||||||
|
|
||||||
What: /sys/bus/iio/devices/iio:deviceX/sampling_frequency
|
What: /sys/bus/iio/devices/iio:deviceX/sampling_frequency
|
||||||
What: /sys/bus/iio/devices/iio:deviceX/buffer/sampling_frequency
|
What: /sys/bus/iio/devices/iio:deviceX/buffer/sampling_frequency
|
||||||
What: /sys/bus/iio/devices/triggerX/sampling_frequency
|
What: /sys/bus/iio/devices/triggerX/sampling_frequency
|
||||||
@@ -1565,3 +1572,10 @@ Description:
|
|||||||
* X is in the plane of the propellers, perpendicular to Y axis,
|
* X is in the plane of the propellers, perpendicular to Y axis,
|
||||||
and positive towards the starboard side of the UAV ;
|
and positive towards the starboard side of the UAV ;
|
||||||
* Z is perpendicular to propellers plane and positive upwards.
|
* Z is perpendicular to propellers plane and positive upwards.
|
||||||
|
|
||||||
|
What: /sys/bus/iio/devices/iio:deviceX/in_electricalconductivity_raw
|
||||||
|
KernelVersion: 4.8
|
||||||
|
Contact: linux-iio@vger.kernel.org
|
||||||
|
Description:
|
||||||
|
Raw (unscaled no offset etc.) electric conductivity reading that
|
||||||
|
can be processed to siemens per meter.
|
||||||
|
|||||||
@@ -1,54 +1,41 @@
|
|||||||
What: /sys/bus/iio/devices/iio:deviceX/tia_resistanceY
|
What: /sys/bus/iio/devices/iio:deviceX/in_intensityY_raw
|
||||||
/sys/bus/iio/devices/iio:deviceX/tia_capacitanceY
|
Date: May 2016
|
||||||
Date: December 2015
|
|
||||||
KernelVersion:
|
|
||||||
Contact: Andrew F. Davis <afd@ti.com>
|
|
||||||
Description:
|
|
||||||
Get and set the resistance and the capacitance settings for the
|
|
||||||
Transimpedance Amplifier. Y is 1 for Rf1 and Cf1, Y is 2 for
|
|
||||||
Rf2 and Cf2 values.
|
|
||||||
|
|
||||||
What: /sys/bus/iio/devices/iio:deviceX/tia_separate_en
|
|
||||||
Date: December 2015
|
|
||||||
KernelVersion:
|
|
||||||
Contact: Andrew F. Davis <afd@ti.com>
|
|
||||||
Description:
|
|
||||||
Enable or disable separate settings for the TransImpedance
|
|
||||||
Amplifier above, when disabled both values are set by the
|
|
||||||
first channel.
|
|
||||||
|
|
||||||
What: /sys/bus/iio/devices/iio:deviceX/in_intensity_ledY_raw
|
|
||||||
/sys/bus/iio/devices/iio:deviceX/in_intensity_ledY_ambient_raw
|
|
||||||
Date: December 2015
|
|
||||||
KernelVersion:
|
KernelVersion:
|
||||||
Contact: Andrew F. Davis <afd@ti.com>
|
Contact: Andrew F. Davis <afd@ti.com>
|
||||||
Description:
|
Description:
|
||||||
Get measured values from the ADC for these stages. Y is the
|
Get measured values from the ADC for these stages. Y is the
|
||||||
specific LED number. The values are expressed in 24-bit twos
|
specific stage number corresponding to datasheet stage names
|
||||||
complement.
|
as follows:
|
||||||
|
1 -> LED2
|
||||||
|
2 -> ALED2/LED3
|
||||||
|
3 -> LED1
|
||||||
|
4 -> ALED1/LED4
|
||||||
|
Note that channels 5 and 6 represent LED2-ALED2 and LED1-ALED1
|
||||||
|
respectively which simply helper channels containing the
|
||||||
|
calculated difference in the value of stage 1 - 2 and 3 - 4.
|
||||||
|
The values are expressed in 24-bit twos complement.
|
||||||
|
|
||||||
What: /sys/bus/iio/devices/iio:deviceX/in_intensity_ledY-ledY_ambient_raw
|
What: /sys/bus/iio/devices/iio:deviceX/in_intensityY_offset
|
||||||
Date: December 2015
|
Date: May 2016
|
||||||
KernelVersion:
|
|
||||||
Contact: Andrew F. Davis <afd@ti.com>
|
|
||||||
Description:
|
|
||||||
Get differential values from the ADC for these stages. Y is the
|
|
||||||
specific LED number. The values are expressed in 24-bit twos
|
|
||||||
complement for the specified LEDs.
|
|
||||||
|
|
||||||
What: /sys/bus/iio/devices/iio:deviceX/out_current_ledY_offset
|
|
||||||
/sys/bus/iio/devices/iio:deviceX/out_current_ledY_ambient_offset
|
|
||||||
Date: December 2015
|
|
||||||
KernelVersion:
|
KernelVersion:
|
||||||
Contact: Andrew F. Davis <afd@ti.com>
|
Contact: Andrew F. Davis <afd@ti.com>
|
||||||
Description:
|
Description:
|
||||||
Get and set the offset cancellation DAC setting for these
|
Get and set the offset cancellation DAC setting for these
|
||||||
stages. The values are expressed in 5-bit sign-magnitude.
|
stages. The values are expressed in 5-bit sign-magnitude.
|
||||||
|
|
||||||
What: /sys/bus/iio/devices/iio:deviceX/out_current_ledY_raw
|
What: /sys/bus/iio/devices/iio:deviceX/in_intensityY_resistance
|
||||||
Date: December 2015
|
What: /sys/bus/iio/devices/iio:deviceX/in_intensityY_capacitance
|
||||||
|
Date: May 2016
|
||||||
KernelVersion:
|
KernelVersion:
|
||||||
Contact: Andrew F. Davis <afd@ti.com>
|
Contact: Andrew F. Davis <afd@ti.com>
|
||||||
Description:
|
Description:
|
||||||
Get and set the LED current for the specified LED. Y is the
|
Get and set the resistance and the capacitance settings for the
|
||||||
specific LED number.
|
Transimpedance Amplifier during the associated stage.
|
||||||
|
|
||||||
|
What: /sys/bus/iio/devices/iio:deviceX/out_currentY_raw
|
||||||
|
Date: May 2016
|
||||||
|
KernelVersion:
|
||||||
|
Contact: Andrew F. Davis <afd@ti.com>
|
||||||
|
Description:
|
||||||
|
Get and set the LED current for the specified LED active during
|
||||||
|
this stage. Y is the specific stage number.
|
||||||
|
|||||||
@@ -1,19 +1,10 @@
|
|||||||
|
|
||||||
What: /sys/class/net/<iface>/batman-adv/throughput_override
|
|
||||||
Date: Feb 2014
|
|
||||||
Contact: Antonio Quartulli <antonio@meshcoding.com>
|
|
||||||
description:
|
|
||||||
Defines the throughput value to be used by B.A.T.M.A.N. V
|
|
||||||
when estimating the link throughput using this interface.
|
|
||||||
If the value is set to 0 then batman-adv will try to
|
|
||||||
estimate the throughput by itself.
|
|
||||||
|
|
||||||
What: /sys/class/net/<iface>/batman-adv/elp_interval
|
What: /sys/class/net/<iface>/batman-adv/elp_interval
|
||||||
Date: Feb 2014
|
Date: Feb 2014
|
||||||
Contact: Linus Lüssing <linus.luessing@web.de>
|
Contact: Linus Lüssing <linus.luessing@web.de>
|
||||||
Description:
|
Description:
|
||||||
Defines the interval in milliseconds in which batman
|
Defines the interval in milliseconds in which batman
|
||||||
sends its probing packets for link quality measurements.
|
emits probing packets for neighbor sensing (ELP).
|
||||||
|
|
||||||
What: /sys/class/net/<iface>/batman-adv/iface_status
|
What: /sys/class/net/<iface>/batman-adv/iface_status
|
||||||
Date: May 2010
|
Date: May 2010
|
||||||
@@ -28,3 +19,12 @@ Description:
|
|||||||
The /sys/class/net/<iface>/batman-adv/mesh_iface file
|
The /sys/class/net/<iface>/batman-adv/mesh_iface file
|
||||||
displays the batman mesh interface this <iface>
|
displays the batman mesh interface this <iface>
|
||||||
currently is associated with.
|
currently is associated with.
|
||||||
|
|
||||||
|
What: /sys/class/net/<iface>/batman-adv/throughput_override
|
||||||
|
Date: Feb 2014
|
||||||
|
Contact: Antonio Quartulli <a@unstable.cc>
|
||||||
|
description:
|
||||||
|
Defines the throughput value to be used by B.A.T.M.A.N. V
|
||||||
|
when estimating the link throughput using this interface.
|
||||||
|
If the value is set to 0 then batman-adv will try to
|
||||||
|
estimate the throughput by itself.
|
||||||
|
|||||||
@@ -77,3 +77,12 @@ Description:
|
|||||||
Enable/disable the PWM signal.
|
Enable/disable the PWM signal.
|
||||||
0 is disabled
|
0 is disabled
|
||||||
1 is enabled
|
1 is enabled
|
||||||
|
|
||||||
|
What: /sys/class/pwm/pwmchipN/pwmX/capture
|
||||||
|
Date: June 2016
|
||||||
|
KernelVersion: 4.8
|
||||||
|
Contact: Lee Jones <lee.jones@linaro.org>
|
||||||
|
Description:
|
||||||
|
Capture information about a PWM signal. The output format is a
|
||||||
|
pair unsigned integers (period and duty cycle), separated by a
|
||||||
|
single space.
|
||||||
|
|||||||
@@ -340,3 +340,13 @@ Description: POWERNV CPUFreq driver's frequency throttle stats directory and
|
|||||||
'policyX/throttle_stats' directory and all the attributes are same as
|
'policyX/throttle_stats' directory and all the attributes are same as
|
||||||
the /sys/devices/system/cpu/cpuX/cpufreq/throttle_stats directory and
|
the /sys/devices/system/cpu/cpuX/cpufreq/throttle_stats directory and
|
||||||
attributes which give the frequency throttle information of the chip.
|
attributes which give the frequency throttle information of the chip.
|
||||||
|
|
||||||
|
What: /sys/devices/system/cpu/cpuX/regs/
|
||||||
|
/sys/devices/system/cpu/cpuX/regs/identification/
|
||||||
|
/sys/devices/system/cpu/cpuX/regs/identification/midr_el1
|
||||||
|
/sys/devices/system/cpu/cpuX/regs/identification/revidr_el1
|
||||||
|
Date: June 2016
|
||||||
|
Contact: Linux ARM Kernel Mailing list <linux-arm-kernel@lists.infradead.org>
|
||||||
|
Description: AArch64 CPU registers
|
||||||
|
'identification' directory exposes the CPU ID registers for
|
||||||
|
identifying model and revision of the CPU.
|
||||||
|
|||||||
@@ -458,7 +458,7 @@ of the function, telling people what it does, and possibly WHY it does
|
|||||||
it.
|
it.
|
||||||
|
|
||||||
When commenting the kernel API functions, please use the kernel-doc format.
|
When commenting the kernel API functions, please use the kernel-doc format.
|
||||||
See the files Documentation/kernel-doc-nano-HOWTO.txt and scripts/kernel-doc
|
See the files Documentation/kernel-documentation.rst and scripts/kernel-doc
|
||||||
for details.
|
for details.
|
||||||
|
|
||||||
Linux style for comments is the C89 "/* ... */" style.
|
Linux style for comments is the C89 "/* ... */" style.
|
||||||
|
|||||||
@@ -369,35 +369,32 @@ See also dma_map_single().
|
|||||||
dma_addr_t
|
dma_addr_t
|
||||||
dma_map_single_attrs(struct device *dev, void *cpu_addr, size_t size,
|
dma_map_single_attrs(struct device *dev, void *cpu_addr, size_t size,
|
||||||
enum dma_data_direction dir,
|
enum dma_data_direction dir,
|
||||||
struct dma_attrs *attrs)
|
unsigned long attrs)
|
||||||
|
|
||||||
void
|
void
|
||||||
dma_unmap_single_attrs(struct device *dev, dma_addr_t dma_addr,
|
dma_unmap_single_attrs(struct device *dev, dma_addr_t dma_addr,
|
||||||
size_t size, enum dma_data_direction dir,
|
size_t size, enum dma_data_direction dir,
|
||||||
struct dma_attrs *attrs)
|
unsigned long attrs)
|
||||||
|
|
||||||
int
|
int
|
||||||
dma_map_sg_attrs(struct device *dev, struct scatterlist *sgl,
|
dma_map_sg_attrs(struct device *dev, struct scatterlist *sgl,
|
||||||
int nents, enum dma_data_direction dir,
|
int nents, enum dma_data_direction dir,
|
||||||
struct dma_attrs *attrs)
|
unsigned long attrs)
|
||||||
|
|
||||||
void
|
void
|
||||||
dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sgl,
|
dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sgl,
|
||||||
int nents, enum dma_data_direction dir,
|
int nents, enum dma_data_direction dir,
|
||||||
struct dma_attrs *attrs)
|
unsigned long attrs)
|
||||||
|
|
||||||
The four functions above are just like the counterpart functions
|
The four functions above are just like the counterpart functions
|
||||||
without the _attrs suffixes, except that they pass an optional
|
without the _attrs suffixes, except that they pass an optional
|
||||||
struct dma_attrs*.
|
dma_attrs.
|
||||||
|
|
||||||
struct dma_attrs encapsulates a set of "DMA attributes". For the
|
|
||||||
definition of struct dma_attrs see linux/dma-attrs.h.
|
|
||||||
|
|
||||||
The interpretation of DMA attributes is architecture-specific, and
|
The interpretation of DMA attributes is architecture-specific, and
|
||||||
each attribute should be documented in Documentation/DMA-attributes.txt.
|
each attribute should be documented in Documentation/DMA-attributes.txt.
|
||||||
|
|
||||||
If struct dma_attrs* is NULL, the semantics of each of these
|
If dma_attrs are 0, the semantics of each of these functions
|
||||||
functions is identical to those of the corresponding function
|
is identical to those of the corresponding function
|
||||||
without the _attrs suffix. As a result dma_map_single_attrs()
|
without the _attrs suffix. As a result dma_map_single_attrs()
|
||||||
can generally replace dma_map_single(), etc.
|
can generally replace dma_map_single(), etc.
|
||||||
|
|
||||||
@@ -405,15 +402,15 @@ As an example of the use of the *_attrs functions, here's how
|
|||||||
you could pass an attribute DMA_ATTR_FOO when mapping memory
|
you could pass an attribute DMA_ATTR_FOO when mapping memory
|
||||||
for DMA:
|
for DMA:
|
||||||
|
|
||||||
#include <linux/dma-attrs.h>
|
#include <linux/dma-mapping.h>
|
||||||
/* DMA_ATTR_FOO should be defined in linux/dma-attrs.h and
|
/* DMA_ATTR_FOO should be defined in linux/dma-mapping.h and
|
||||||
* documented in Documentation/DMA-attributes.txt */
|
* documented in Documentation/DMA-attributes.txt */
|
||||||
...
|
...
|
||||||
|
|
||||||
DEFINE_DMA_ATTRS(attrs);
|
unsigned long attr;
|
||||||
dma_set_attr(DMA_ATTR_FOO, &attrs);
|
attr |= DMA_ATTR_FOO;
|
||||||
....
|
....
|
||||||
n = dma_map_sg_attrs(dev, sg, nents, DMA_TO_DEVICE, &attr);
|
n = dma_map_sg_attrs(dev, sg, nents, DMA_TO_DEVICE, attr);
|
||||||
....
|
....
|
||||||
|
|
||||||
Architectures that care about DMA_ATTR_FOO would check for its
|
Architectures that care about DMA_ATTR_FOO would check for its
|
||||||
@@ -422,12 +419,10 @@ routines, e.g.:
|
|||||||
|
|
||||||
void whizco_dma_map_sg_attrs(struct device *dev, dma_addr_t dma_addr,
|
void whizco_dma_map_sg_attrs(struct device *dev, dma_addr_t dma_addr,
|
||||||
size_t size, enum dma_data_direction dir,
|
size_t size, enum dma_data_direction dir,
|
||||||
struct dma_attrs *attrs)
|
unsigned long attrs)
|
||||||
{
|
{
|
||||||
....
|
....
|
||||||
int foo = dma_get_attr(DMA_ATTR_FOO, attrs);
|
if (attrs & DMA_ATTR_FOO)
|
||||||
....
|
|
||||||
if (foo)
|
|
||||||
/* twizzle the frobnozzle */
|
/* twizzle the frobnozzle */
|
||||||
....
|
....
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
==============
|
==============
|
||||||
|
|
||||||
This document describes the semantics of the DMA attributes that are
|
This document describes the semantics of the DMA attributes that are
|
||||||
defined in linux/dma-attrs.h.
|
defined in linux/dma-mapping.h.
|
||||||
|
|
||||||
DMA_ATTR_WRITE_BARRIER
|
DMA_ATTR_WRITE_BARRIER
|
||||||
----------------------
|
----------------------
|
||||||
|
|||||||
@@ -136,6 +136,7 @@
|
|||||||
!Finclude/net/cfg80211.h cfg80211_ibss_joined
|
!Finclude/net/cfg80211.h cfg80211_ibss_joined
|
||||||
!Finclude/net/cfg80211.h cfg80211_connect_result
|
!Finclude/net/cfg80211.h cfg80211_connect_result
|
||||||
!Finclude/net/cfg80211.h cfg80211_connect_bss
|
!Finclude/net/cfg80211.h cfg80211_connect_bss
|
||||||
|
!Finclude/net/cfg80211.h cfg80211_connect_timeout
|
||||||
!Finclude/net/cfg80211.h cfg80211_roamed
|
!Finclude/net/cfg80211.h cfg80211_roamed
|
||||||
!Finclude/net/cfg80211.h cfg80211_disconnected
|
!Finclude/net/cfg80211.h cfg80211_disconnected
|
||||||
!Finclude/net/cfg80211.h cfg80211_ready_on_channel
|
!Finclude/net/cfg80211.h cfg80211_ready_on_channel
|
||||||
|
|||||||
@@ -14,10 +14,16 @@ DOCBOOKS := z8530book.xml device-drivers.xml \
|
|||||||
genericirq.xml s390-drivers.xml uio-howto.xml scsi.xml \
|
genericirq.xml s390-drivers.xml uio-howto.xml scsi.xml \
|
||||||
80211.xml debugobjects.xml sh.xml regulator.xml \
|
80211.xml debugobjects.xml sh.xml regulator.xml \
|
||||||
alsa-driver-api.xml writing-an-alsa-driver.xml \
|
alsa-driver-api.xml writing-an-alsa-driver.xml \
|
||||||
tracepoint.xml gpu.xml media_api.xml w1.xml \
|
tracepoint.xml w1.xml \
|
||||||
writing_musb_glue_layer.xml crypto-API.xml iio.xml
|
writing_musb_glue_layer.xml crypto-API.xml iio.xml
|
||||||
|
|
||||||
include Documentation/DocBook/media/Makefile
|
ifeq ($(DOCBOOKS),)
|
||||||
|
|
||||||
|
# Skip DocBook build if the user explicitly requested no DOCBOOKS.
|
||||||
|
.DEFAULT:
|
||||||
|
@echo " SKIP DocBook $@ target (DOCBOOKS=\"\" specified)."
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
###
|
###
|
||||||
# The build process is as follows (targets):
|
# The build process is as follows (targets):
|
||||||
@@ -33,10 +39,6 @@ PDF_METHOD = $(prefer-db2x)
|
|||||||
PS_METHOD = $(prefer-db2x)
|
PS_METHOD = $(prefer-db2x)
|
||||||
|
|
||||||
|
|
||||||
###
|
|
||||||
# The targets that may be used.
|
|
||||||
PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs cleandocs
|
|
||||||
|
|
||||||
targets += $(DOCBOOKS)
|
targets += $(DOCBOOKS)
|
||||||
BOOKS := $(addprefix $(obj)/,$(DOCBOOKS))
|
BOOKS := $(addprefix $(obj)/,$(DOCBOOKS))
|
||||||
xmldocs: $(BOOKS)
|
xmldocs: $(BOOKS)
|
||||||
@@ -51,7 +53,6 @@ pdfdocs: $(PDF)
|
|||||||
HTML := $(sort $(patsubst %.xml, %.html, $(BOOKS)))
|
HTML := $(sort $(patsubst %.xml, %.html, $(BOOKS)))
|
||||||
htmldocs: $(HTML)
|
htmldocs: $(HTML)
|
||||||
$(call cmd,build_main_index)
|
$(call cmd,build_main_index)
|
||||||
$(call install_media_images)
|
|
||||||
|
|
||||||
MAN := $(patsubst %.xml, %.9, $(BOOKS))
|
MAN := $(patsubst %.xml, %.9, $(BOOKS))
|
||||||
mandocs: $(MAN)
|
mandocs: $(MAN)
|
||||||
@@ -63,6 +64,9 @@ installmandocs: mandocs
|
|||||||
sort -k 2 -k 1 | uniq -f 1 | sed -e 's: :/:' | \
|
sort -k 2 -k 1 | uniq -f 1 | sed -e 's: :/:' | \
|
||||||
xargs install -m 644 -t /usr/local/man/man9/
|
xargs install -m 644 -t /usr/local/man/man9/
|
||||||
|
|
||||||
|
# no-op for the DocBook toolchain
|
||||||
|
epubdocs:
|
||||||
|
|
||||||
###
|
###
|
||||||
#External programs used
|
#External programs used
|
||||||
KERNELDOCXMLREF = $(srctree)/scripts/kernel-doc-xml-ref
|
KERNELDOCXMLREF = $(srctree)/scripts/kernel-doc-xml-ref
|
||||||
@@ -216,10 +220,12 @@ silent_gen_xml = :
|
|||||||
-e "s/>/\\>/g"; \
|
-e "s/>/\\>/g"; \
|
||||||
echo "</programlisting>") > $@
|
echo "</programlisting>") > $@
|
||||||
|
|
||||||
|
endif # DOCBOOKS=""
|
||||||
|
|
||||||
###
|
###
|
||||||
# Help targets as used by the top-level makefile
|
# Help targets as used by the top-level makefile
|
||||||
dochelp:
|
dochelp:
|
||||||
@echo ' Linux kernel internal documentation in different formats:'
|
@echo ' Linux kernel internal documentation in different formats (DocBook):'
|
||||||
@echo ' htmldocs - HTML'
|
@echo ' htmldocs - HTML'
|
||||||
@echo ' pdfdocs - PDF'
|
@echo ' pdfdocs - PDF'
|
||||||
@echo ' psdocs - Postscript'
|
@echo ' psdocs - Postscript'
|
||||||
@@ -230,6 +236,9 @@ dochelp:
|
|||||||
@echo
|
@echo
|
||||||
@echo ' make DOCBOOKS="s1.xml s2.xml" [target] Generate only docs s1.xml s2.xml'
|
@echo ' make DOCBOOKS="s1.xml s2.xml" [target] Generate only docs s1.xml s2.xml'
|
||||||
@echo ' valid values for DOCBOOKS are: $(DOCBOOKS)'
|
@echo ' valid values for DOCBOOKS are: $(DOCBOOKS)'
|
||||||
|
@echo
|
||||||
|
@echo " make DOCBOOKS=\"\" [target] Don't generate docs from Docbook"
|
||||||
|
@echo ' This is useful to generate only the ReST docs (Sphinx)'
|
||||||
|
|
||||||
|
|
||||||
###
|
###
|
||||||
@@ -251,7 +260,7 @@ clean-files := $(DOCBOOKS) \
|
|||||||
|
|
||||||
clean-dirs := $(patsubst %.xml,%,$(DOCBOOKS)) man
|
clean-dirs := $(patsubst %.xml,%,$(DOCBOOKS)) man
|
||||||
|
|
||||||
cleandocs: cleanmediadocs
|
cleandocs:
|
||||||
$(Q)rm -f $(call objectify, $(clean-files))
|
$(Q)rm -f $(call objectify, $(clean-files))
|
||||||
$(Q)rm -rf $(call objectify, $(clean-dirs))
|
$(Q)rm -rf $(call objectify, $(clean-dirs))
|
||||||
|
|
||||||
|
|||||||
@@ -440,8 +440,8 @@
|
|||||||
The type flag specifies the type of the cipher algorithm.
|
The type flag specifies the type of the cipher algorithm.
|
||||||
The caller usually provides a 0 when the caller wants the
|
The caller usually provides a 0 when the caller wants the
|
||||||
default handling. Otherwise, the caller may provide the
|
default handling. Otherwise, the caller may provide the
|
||||||
following selections which match the the aforementioned
|
following selections which match the aforementioned cipher
|
||||||
cipher types:
|
types:
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<itemizedlist>
|
<itemizedlist>
|
||||||
|
|||||||
@@ -161,6 +161,10 @@ X!Edrivers/base/interface.c
|
|||||||
!Iinclude/linux/fence.h
|
!Iinclude/linux/fence.h
|
||||||
!Edrivers/dma-buf/seqno-fence.c
|
!Edrivers/dma-buf/seqno-fence.c
|
||||||
!Iinclude/linux/seqno-fence.h
|
!Iinclude/linux/seqno-fence.h
|
||||||
|
!Edrivers/dma-buf/fence-array.c
|
||||||
|
!Iinclude/linux/fence-array.h
|
||||||
|
!Edrivers/dma-buf/reservation.c
|
||||||
|
!Iinclude/linux/reservation.h
|
||||||
!Edrivers/dma-buf/sync_file.c
|
!Edrivers/dma-buf/sync_file.c
|
||||||
!Iinclude/linux/sync_file.h
|
!Iinclude/linux/sync_file.h
|
||||||
</sect2>
|
</sect2>
|
||||||
@@ -247,61 +251,6 @@ X!Isound/sound_firmware.c
|
|||||||
-->
|
-->
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
<chapter id="mediadev">
|
|
||||||
<title>Media Devices</title>
|
|
||||||
|
|
||||||
<sect1><title>Video2Linux devices</title>
|
|
||||||
!Iinclude/media/tuner.h
|
|
||||||
!Iinclude/media/tuner-types.h
|
|
||||||
!Iinclude/media/tveeprom.h
|
|
||||||
!Iinclude/media/v4l2-async.h
|
|
||||||
!Iinclude/media/v4l2-ctrls.h
|
|
||||||
!Iinclude/media/v4l2-dv-timings.h
|
|
||||||
!Iinclude/media/v4l2-event.h
|
|
||||||
!Iinclude/media/v4l2-flash-led-class.h
|
|
||||||
!Iinclude/media/v4l2-mc.h
|
|
||||||
!Iinclude/media/v4l2-mediabus.h
|
|
||||||
!Iinclude/media/v4l2-mem2mem.h
|
|
||||||
!Iinclude/media/v4l2-of.h
|
|
||||||
!Iinclude/media/v4l2-rect.h
|
|
||||||
!Iinclude/media/v4l2-subdev.h
|
|
||||||
!Iinclude/media/videobuf2-core.h
|
|
||||||
!Iinclude/media/videobuf2-v4l2.h
|
|
||||||
!Iinclude/media/videobuf2-memops.h
|
|
||||||
</sect1>
|
|
||||||
<sect1><title>Digital TV (DVB) devices</title>
|
|
||||||
<sect1><title>Digital TV Common functions</title>
|
|
||||||
!Idrivers/media/dvb-core/dvb_math.h
|
|
||||||
!Idrivers/media/dvb-core/dvb_ringbuffer.h
|
|
||||||
!Idrivers/media/dvb-core/dvbdev.h
|
|
||||||
</sect1>
|
|
||||||
<sect1><title>Digital TV Frontend kABI</title>
|
|
||||||
!Pdrivers/media/dvb-core/dvb_frontend.h Digital TV Frontend
|
|
||||||
!Idrivers/media/dvb-core/dvb_frontend.h
|
|
||||||
</sect1>
|
|
||||||
<sect1><title>Digital TV Demux kABI</title>
|
|
||||||
!Pdrivers/media/dvb-core/demux.h Digital TV Demux
|
|
||||||
<sect1><title>Demux Callback API</title>
|
|
||||||
!Pdrivers/media/dvb-core/demux.h Demux Callback
|
|
||||||
</sect1>
|
|
||||||
!Idrivers/media/dvb-core/demux.h
|
|
||||||
</sect1>
|
|
||||||
<sect1><title>Digital TV Conditional Access kABI</title>
|
|
||||||
!Idrivers/media/dvb-core/dvb_ca_en50221.h
|
|
||||||
</sect1>
|
|
||||||
</sect1>
|
|
||||||
<sect1><title>Remote Controller devices</title>
|
|
||||||
!Iinclude/media/rc-core.h
|
|
||||||
!Iinclude/media/lirc_dev.h
|
|
||||||
</sect1>
|
|
||||||
<sect1><title>Media Controller devices</title>
|
|
||||||
!Pinclude/media/media-device.h Media Controller
|
|
||||||
!Iinclude/media/media-device.h
|
|
||||||
!Iinclude/media/media-devnode.h
|
|
||||||
!Iinclude/media/media-entity.h
|
|
||||||
</sect1>
|
|
||||||
|
|
||||||
</chapter>
|
|
||||||
|
|
||||||
<chapter id="uart16x50">
|
<chapter id="uart16x50">
|
||||||
<title>16x50 UART Driver</title>
|
<title>16x50 UART Driver</title>
|
||||||
@@ -539,7 +488,7 @@ X!Ilib/fonts/fonts.c
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
!Iinclude/linux/hsi/hsi.h
|
!Iinclude/linux/hsi/hsi.h
|
||||||
!Edrivers/hsi/hsi.c
|
!Edrivers/hsi/hsi_core.c
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
<chapter id="pwm">
|
<chapter id="pwm">
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -594,7 +594,7 @@
|
|||||||
|
|
||||||
irqreturn_t sensor_iio_pollfunc(int irq, void *p)
|
irqreturn_t sensor_iio_pollfunc(int irq, void *p)
|
||||||
{
|
{
|
||||||
pf->timestamp = iio_get_time_ns();
|
pf->timestamp = iio_get_time_ns((struct indio_dev *)p);
|
||||||
return IRQ_WAKE_THREAD;
|
return IRQ_WAKE_THREAD;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
1
Documentation/DocBook/media/.gitignore
vendored
1
Documentation/DocBook/media/.gitignore
vendored
@@ -1 +0,0 @@
|
|||||||
!*.svg
|
|
||||||
@@ -1,425 +0,0 @@
|
|||||||
###
|
|
||||||
# Media build rules - Auto-generates media contents/indexes and *.h xml's
|
|
||||||
#
|
|
||||||
|
|
||||||
SHELL=/bin/bash
|
|
||||||
|
|
||||||
MEDIA_OBJ_DIR=$(objtree)/Documentation/DocBook/
|
|
||||||
MEDIA_SRC_DIR=$(srctree)/Documentation/DocBook/media
|
|
||||||
|
|
||||||
MEDIA_TEMP = media-entities.tmpl \
|
|
||||||
media-indices.tmpl \
|
|
||||||
videodev2.h.xml \
|
|
||||||
v4l2.xml \
|
|
||||||
audio.h.xml \
|
|
||||||
ca.h.xml \
|
|
||||||
dmx.h.xml \
|
|
||||||
frontend.h.xml \
|
|
||||||
net.h.xml \
|
|
||||||
video.h.xml \
|
|
||||||
|
|
||||||
IMGFILES := $(patsubst %.b64,%, $(notdir $(shell ls $(MEDIA_SRC_DIR)/*.b64)))
|
|
||||||
OBJIMGFILES := $(addprefix $(MEDIA_OBJ_DIR)/, $(IMGFILES))
|
|
||||||
GENFILES := $(addprefix $(MEDIA_OBJ_DIR)/, $(MEDIA_TEMP))
|
|
||||||
|
|
||||||
PHONY += cleanmediadocs
|
|
||||||
|
|
||||||
cleanmediadocs:
|
|
||||||
-@rm -f `find $(MEDIA_OBJ_DIR) -type l` $(GENFILES) $(OBJIMGFILES) 2>/dev/null
|
|
||||||
|
|
||||||
$(obj)/media_api.xml: $(GENFILES) FORCE
|
|
||||||
|
|
||||||
#$(MEDIA_OBJ_DIR)/media_api.html: $(MEDIA_OBJ_DIR)/media_api.xml
|
|
||||||
#$(MEDIA_OBJ_DIR)/media_api.pdf: $(MEDIA_OBJ_DIR)/media_api.xml
|
|
||||||
#$(MEDIA_OBJ_DIR)/media_api.ps: $(MEDIA_OBJ_DIR)/media_api.xml
|
|
||||||
|
|
||||||
V4L_SGMLS = \
|
|
||||||
$(shell ls $(MEDIA_SRC_DIR)/v4l/*.xml|perl -ne 'print "$$1 " if (m,.*/(.*)\n,)') \
|
|
||||||
capture.c.xml \
|
|
||||||
keytable.c.xml \
|
|
||||||
v4l2grab.c.xml
|
|
||||||
|
|
||||||
DVB_SGMLS = \
|
|
||||||
$(shell ls $(MEDIA_SRC_DIR)/dvb/*.xml|perl -ne 'print "$$1 " if (m,.*/(.*)\n,)')
|
|
||||||
|
|
||||||
MEDIA_SGMLS = $(addprefix ./,$(V4L_SGMLS)) $(addprefix ./,$(DVB_SGMLS)) $(addprefix ./,$(MEDIA_TEMP))
|
|
||||||
|
|
||||||
FUNCS = \
|
|
||||||
close \
|
|
||||||
ioctl \
|
|
||||||
mmap \
|
|
||||||
munmap \
|
|
||||||
open \
|
|
||||||
poll \
|
|
||||||
read \
|
|
||||||
select \
|
|
||||||
write \
|
|
||||||
|
|
||||||
IOCTLS = \
|
|
||||||
$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/videodev2.h) \
|
|
||||||
$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/audio.h) \
|
|
||||||
$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/ca.h) \
|
|
||||||
$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/dmx.h) \
|
|
||||||
$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/frontend.h) \
|
|
||||||
$(shell perl -ne 'print "$$1 " if /\#define\s+([A-Z][^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/net.h) \
|
|
||||||
$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/video.h) \
|
|
||||||
$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/media.h) \
|
|
||||||
$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/v4l2-subdev.h) \
|
|
||||||
|
|
||||||
DEFINES = \
|
|
||||||
$(shell perl -ne 'print "$$1 " if /\#define\s+(DTV_[^\s]+)\s+/' $(srctree)/include/uapi/linux/dvb/frontend.h) \
|
|
||||||
|
|
||||||
TYPES = \
|
|
||||||
$(shell perl -ne 'print "$$1 " if /^typedef\s+.*\s+(\S+)\;/' $(srctree)/include/uapi/linux/videodev2.h) \
|
|
||||||
$(shell perl -ne 'print "$$1 " if /^typedef\s+.*\s+(\S+)\;/' $(srctree)/include/uapi/linux/dvb/frontend.h)
|
|
||||||
|
|
||||||
ENUMS = \
|
|
||||||
$(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' \
|
|
||||||
$(srctree)/include/uapi/linux/videodev2.h \
|
|
||||||
$(srctree)/include/uapi/linux/dvb/audio.h \
|
|
||||||
$(srctree)/include/uapi/linux/dvb/ca.h \
|
|
||||||
$(srctree)/include/uapi/linux/dvb/dmx.h \
|
|
||||||
$(srctree)/include/uapi/linux/dvb/frontend.h \
|
|
||||||
$(srctree)/include/uapi/linux/dvb/net.h \
|
|
||||||
$(srctree)/include/uapi/linux/dvb/video.h \
|
|
||||||
$(srctree)/include/uapi/linux/media.h \
|
|
||||||
$(srctree)/include/uapi/linux/v4l2-mediabus.h \
|
|
||||||
$(srctree)/include/uapi/linux/v4l2-subdev.h)
|
|
||||||
|
|
||||||
ENUM_DEFS = \
|
|
||||||
$(shell perl -e 'open IN,"cat @ARGV| cpp -fpreprocessed |"; while (<IN>) { if ($$enum) {print "$$1\n" if (/\s*([A-Z]\S+)\b/); } $$enum = 0 if ($$enum && /^\}/); $$enum = 1 if(/^\s*enum\s/); }; close IN;' \
|
|
||||||
$(srctree)/include/uapi/linux/dvb/dmx.h \
|
|
||||||
$(srctree)/include/uapi/linux/dvb/frontend.h)
|
|
||||||
|
|
||||||
STRUCTS = \
|
|
||||||
$(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/videodev2.h) \
|
|
||||||
$(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s\{]+)\s*/)' $(srctree)/include/uapi/linux/dvb/audio.h) \
|
|
||||||
$(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/ca.h) \
|
|
||||||
$(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/dmx.h) \
|
|
||||||
$(shell perl -ne 'print "$$1 " if (!/dtv\_cmds\_h/ && /^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/frontend.h) \
|
|
||||||
$(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/ && !/_old/)' $(srctree)/include/uapi/linux/dvb/net.h) \
|
|
||||||
$(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/video.h) \
|
|
||||||
$(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/media.h) \
|
|
||||||
$(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/v4l2-subdev.h) \
|
|
||||||
$(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/v4l2-mediabus.h)
|
|
||||||
|
|
||||||
ERRORS = \
|
|
||||||
E2BIG \
|
|
||||||
EACCES \
|
|
||||||
EAGAIN \
|
|
||||||
EBADF \
|
|
||||||
EBADFD \
|
|
||||||
EBADR \
|
|
||||||
EBADRQC \
|
|
||||||
EBUSY \
|
|
||||||
ECHILD \
|
|
||||||
ECONNRESET \
|
|
||||||
EDEADLK \
|
|
||||||
EDOM \
|
|
||||||
EEXIST \
|
|
||||||
EFAULT \
|
|
||||||
EFBIG \
|
|
||||||
EILSEQ \
|
|
||||||
EINIT \
|
|
||||||
EINPROGRESS \
|
|
||||||
EINTR \
|
|
||||||
EINVAL \
|
|
||||||
EIO \
|
|
||||||
EMFILE \
|
|
||||||
ENFILE \
|
|
||||||
ENOBUFS \
|
|
||||||
ENODATA \
|
|
||||||
ENODEV \
|
|
||||||
ENOENT \
|
|
||||||
ENOIOCTLCMD \
|
|
||||||
ENOMEM \
|
|
||||||
ENOSPC \
|
|
||||||
ENOSR \
|
|
||||||
ENOSYS \
|
|
||||||
ENOTSUP \
|
|
||||||
ENOTSUPP \
|
|
||||||
ENOTTY \
|
|
||||||
ENXIO \
|
|
||||||
EOPNOTSUPP \
|
|
||||||
EOVERFLOW \
|
|
||||||
EPERM \
|
|
||||||
EPIPE \
|
|
||||||
EPROTO \
|
|
||||||
ERANGE \
|
|
||||||
EREMOTE \
|
|
||||||
EREMOTEIO \
|
|
||||||
ERESTART \
|
|
||||||
ERESTARTSYS \
|
|
||||||
ESHUTDOWN \
|
|
||||||
ESPIPE \
|
|
||||||
ETIME \
|
|
||||||
ETIMEDOUT \
|
|
||||||
EUSERS \
|
|
||||||
EWOULDBLOCK \
|
|
||||||
EXDEV \
|
|
||||||
|
|
||||||
ESCAPE = \
|
|
||||||
-e "s/&/\\&/g" \
|
|
||||||
-e "s/</\\</g" \
|
|
||||||
-e "s/>/\\>/g"
|
|
||||||
|
|
||||||
FILENAME = \
|
|
||||||
-e s,"^[^\/]*/",, \
|
|
||||||
-e s/"\\.xml"// \
|
|
||||||
-e s/"\\.tmpl"// \
|
|
||||||
-e s/\\\./-/g \
|
|
||||||
-e s/"^func-"// \
|
|
||||||
-e s/"^pixfmt-"// \
|
|
||||||
-e s/"^vidioc-"//
|
|
||||||
|
|
||||||
# Generate references to these structs in videodev2.h.xml.
|
|
||||||
DOCUMENTED = \
|
|
||||||
-e "s/\(enum *\)v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1<link linkend=\"\2\">v4l2_mpeg_cx2341x_video_\2<\/link>/g" \
|
|
||||||
-e "s/\(\(enum\|struct\) *\)\(v4l2_[a-zA-Z0-9_]*\)/\1<link linkend=\"\3\">\3<\/link>/g" \
|
|
||||||
-e "s/\(V4L2_PIX_FMT_[A-Z0-9_]\+\)\(\s\+v4l2_fourcc\)/<link linkend=\"\1\">\1<\/link>\2/g" \
|
|
||||||
-e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \
|
|
||||||
-e "s/v4l2\-mpeg\-vbi\-ITV0/v4l2-mpeg-vbi-itv0-1/g"
|
|
||||||
|
|
||||||
DVB_DOCUMENTED = \
|
|
||||||
-e "s,\(struct\s\+\)\([a-z0-9_]\+\)\(\s\+{\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
|
|
||||||
-e "s,\(}\s\+\)\([a-z0-9_]\+_t\+\),\1\<link linkend=\"\2\">\2\<\/link\>,g" \
|
|
||||||
-e "s,\(define\s\+\)\(DTV_[A-Z0-9_]\+\)\(\s\+[0-9]\+\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
|
|
||||||
-e "s,<link\s\+linkend=\".*\">\(DTV_IOCTL_MAX_MSGS\|dtv_cmds_h\|__.*_old\)<\/link>,\1,g" \
|
|
||||||
-e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \
|
|
||||||
-e "s,\(audio-mixer\|audio-karaoke\|audio-status\|ca-slot-info\|ca-descr-info\|ca-caps\|ca-msg\|ca-descr\|ca-pid\|dmx-filter\|dmx-caps\|video-system\|video-highlight\|video-spu\|video-spu-palette\|video-navi-pack\)-t,\1,g" \
|
|
||||||
-e "s,DTV-ISDBT-LAYER[A-C],DTV-ISDBT-LAYER,g" \
|
|
||||||
-e "s,\(define\s\+\)\([A-Z0-9_]\+\)\(\s\+_IO\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
|
|
||||||
-e "s,\(define\s\+\)\(DTV_[A-Z0-9_]\+\)\(\s\+\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
|
|
||||||
-e "s,<link\s\+linkend=\".*\">\(__.*_OLD\)<\/link>,\1,g" \
|
|
||||||
-e "s/\(linkend\=\"\)FE_SET_PROPERTY/\1FE_GET_PROPERTY/g" \
|
|
||||||
-e "s,<link\s\+linkend=\".*\">\(DTV_ISDBS_TS_ID_LEGACY\|DTV_MAX_COMMAND\|DTV_IOCTL_MAX_MSGS\)<\/link>,\1,g" \
|
|
||||||
|
|
||||||
#
|
|
||||||
# Media targets and dependencies
|
|
||||||
#
|
|
||||||
|
|
||||||
install_media_images = \
|
|
||||||
$(Q)if [ "x$(findstring media_api.xml,$(DOCBOOKS))" != "x" ]; then \
|
|
||||||
mkdir -p $(MEDIA_OBJ_DIR)/media_api; \
|
|
||||||
cp $(OBJIMGFILES) $(MEDIA_SRC_DIR)/*.svg $(MEDIA_SRC_DIR)/v4l/*.svg $(MEDIA_OBJ_DIR)/media_api; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
$(MEDIA_OBJ_DIR)/%: $(MEDIA_SRC_DIR)/%.b64
|
|
||||||
$(Q)base64 -d $< >$@
|
|
||||||
|
|
||||||
$(MEDIA_OBJ_DIR)/v4l2.xml: $(OBJIMGFILES)
|
|
||||||
@$($(quiet)gen_xml)
|
|
||||||
@(ln -sf `cd $(MEDIA_SRC_DIR) && /bin/pwd`/v4l/*xml $(MEDIA_OBJ_DIR)/)
|
|
||||||
@(ln -sf `cd $(MEDIA_SRC_DIR) && /bin/pwd`/dvb/*xml $(MEDIA_OBJ_DIR)/)
|
|
||||||
|
|
||||||
$(MEDIA_OBJ_DIR)/videodev2.h.xml: $(srctree)/include/uapi/linux/videodev2.h $(MEDIA_OBJ_DIR)/v4l2.xml
|
|
||||||
@$($(quiet)gen_xml)
|
|
||||||
@( \
|
|
||||||
echo "<programlisting>") > $@
|
|
||||||
@( \
|
|
||||||
expand --tabs=8 < $< | \
|
|
||||||
sed $(ESCAPE) $(DOCUMENTED) | \
|
|
||||||
sed 's/i\.e\./&ie;/') >> $@
|
|
||||||
@( \
|
|
||||||
echo "</programlisting>") >> $@
|
|
||||||
|
|
||||||
$(MEDIA_OBJ_DIR)/audio.h.xml: $(srctree)/include/uapi/linux/dvb/audio.h $(MEDIA_OBJ_DIR)/v4l2.xml
|
|
||||||
@$($(quiet)gen_xml)
|
|
||||||
@( \
|
|
||||||
echo "<programlisting>") > $@
|
|
||||||
@( \
|
|
||||||
expand --tabs=8 < $< | \
|
|
||||||
sed $(ESCAPE) $(DVB_DOCUMENTED) | \
|
|
||||||
sed 's/i\.e\./&ie;/') >> $@
|
|
||||||
@( \
|
|
||||||
echo "</programlisting>") >> $@
|
|
||||||
|
|
||||||
$(MEDIA_OBJ_DIR)/ca.h.xml: $(srctree)/include/uapi/linux/dvb/ca.h $(MEDIA_OBJ_DIR)/v4l2.xml
|
|
||||||
@$($(quiet)gen_xml)
|
|
||||||
@( \
|
|
||||||
echo "<programlisting>") > $@
|
|
||||||
@( \
|
|
||||||
expand --tabs=8 < $< | \
|
|
||||||
sed $(ESCAPE) $(DVB_DOCUMENTED) | \
|
|
||||||
sed 's/i\.e\./&ie;/') >> $@
|
|
||||||
@( \
|
|
||||||
echo "</programlisting>") >> $@
|
|
||||||
|
|
||||||
$(MEDIA_OBJ_DIR)/dmx.h.xml: $(srctree)/include/uapi/linux/dvb/dmx.h $(MEDIA_OBJ_DIR)/v4l2.xml
|
|
||||||
@$($(quiet)gen_xml)
|
|
||||||
@( \
|
|
||||||
echo "<programlisting>") > $@
|
|
||||||
@( \
|
|
||||||
for ident in $(ENUM_DEFS) ; do \
|
|
||||||
entity=`echo $$ident | tr _ -` ; \
|
|
||||||
r="$$r s/([^\w\-])$$ident([^\w\-])/\1\&$$entity\;\2/g;";\
|
|
||||||
done; \
|
|
||||||
expand --tabs=8 < $< | \
|
|
||||||
sed $(ESCAPE) $(DVB_DOCUMENTED) | \
|
|
||||||
sed 's/i\.e\./&ie;/' | \
|
|
||||||
perl -ne "$$r print $$_;") >> $@
|
|
||||||
@( \
|
|
||||||
echo "</programlisting>") >> $@
|
|
||||||
|
|
||||||
$(MEDIA_OBJ_DIR)/frontend.h.xml: $(srctree)/include/uapi/linux/dvb/frontend.h $(MEDIA_OBJ_DIR)/v4l2.xml
|
|
||||||
@$($(quiet)gen_xml)
|
|
||||||
@( \
|
|
||||||
echo "<programlisting>") > $@
|
|
||||||
@( \
|
|
||||||
for ident in $(ENUM_DEFS) ; do \
|
|
||||||
entity=`echo $$ident | tr _ -` ; \
|
|
||||||
r="$$r s/([^\w\-])$$ident([^\w\-])/\1\&$$entity\;\2/g;";\
|
|
||||||
done; \
|
|
||||||
expand --tabs=8 < $< | \
|
|
||||||
sed $(ESCAPE) $(DVB_DOCUMENTED) | \
|
|
||||||
sed 's/i\.e\./&ie;/' | \
|
|
||||||
perl -ne "$$r print $$_;") >> $@
|
|
||||||
@( \
|
|
||||||
echo "</programlisting>") >> $@
|
|
||||||
|
|
||||||
$(MEDIA_OBJ_DIR)/net.h.xml: $(srctree)/include/uapi/linux/dvb/net.h $(MEDIA_OBJ_DIR)/v4l2.xml
|
|
||||||
@$($(quiet)gen_xml)
|
|
||||||
@( \
|
|
||||||
echo "<programlisting>") > $@
|
|
||||||
@( \
|
|
||||||
expand --tabs=8 < $< | \
|
|
||||||
sed $(ESCAPE) $(DVB_DOCUMENTED) | \
|
|
||||||
sed 's/i\.e\./&ie;/') >> $@
|
|
||||||
@( \
|
|
||||||
echo "</programlisting>") >> $@
|
|
||||||
|
|
||||||
$(MEDIA_OBJ_DIR)/video.h.xml: $(srctree)/include/uapi/linux/dvb/video.h $(MEDIA_OBJ_DIR)/v4l2.xml
|
|
||||||
@$($(quiet)gen_xml)
|
|
||||||
@( \
|
|
||||||
echo "<programlisting>") > $@
|
|
||||||
@( \
|
|
||||||
expand --tabs=8 < $< | \
|
|
||||||
sed $(ESCAPE) $(DVB_DOCUMENTED) | \
|
|
||||||
sed 's/i\.e\./&ie;/') >> $@
|
|
||||||
@( \
|
|
||||||
echo "</programlisting>") >> $@
|
|
||||||
|
|
||||||
$(MEDIA_OBJ_DIR)/media-entities.tmpl: $(MEDIA_OBJ_DIR)/v4l2.xml
|
|
||||||
@$($(quiet)gen_xml)
|
|
||||||
@( \
|
|
||||||
echo "<!-- Generated file! Do not edit. -->") >$@
|
|
||||||
@( \
|
|
||||||
echo -e "\n<!-- Functions -->") >>$@
|
|
||||||
@( \
|
|
||||||
for ident in $(FUNCS) ; do \
|
|
||||||
entity=`echo $$ident | tr _ -` ; \
|
|
||||||
echo "<!ENTITY func-$$entity \"<link" \
|
|
||||||
"linkend='func-$$entity'><function>$$ident()</function></link>\">" \
|
|
||||||
>>$@ ; \
|
|
||||||
done)
|
|
||||||
@( \
|
|
||||||
echo -e "\n<!-- Ioctls -->") >>$@
|
|
||||||
@( \
|
|
||||||
for ident in `echo $(IOCTLS) | sed -e "s,VIDIOC_RESERVED,,"`; do\
|
|
||||||
entity=`echo $$ident | tr _ -` ; \
|
|
||||||
id=`grep -e "<refname>$$ident" -e "<section id=\"$$ident\"" $$(find $(MEDIA_SRC_DIR) -name *.xml -type f)| sed -r s,"^.*/(.*).xml.*","\1",` ; \
|
|
||||||
if [ "$$id" != "" ]; then echo "<!ENTITY $$entity \"<link" \
|
|
||||||
"linkend='$$id'><constant>$$ident</constant></link>\">" \
|
|
||||||
>>$@ ; else \
|
|
||||||
echo "Warning: undocumented ioctl: $$ident. Please document it at the media DocBook!" >&2; \
|
|
||||||
fi; \
|
|
||||||
done)
|
|
||||||
@( \
|
|
||||||
echo -e "\n<!-- Defines -->") >>$@
|
|
||||||
@( \
|
|
||||||
for ident in $(DEFINES) ; do \
|
|
||||||
entity=`echo $$ident | tr _ -` ; \
|
|
||||||
echo "<!ENTITY $$entity \"<link" \
|
|
||||||
"linkend='$$entity'><constant>$$ident</constant></link>\">" \
|
|
||||||
>>$@ ; \
|
|
||||||
done)
|
|
||||||
@( \
|
|
||||||
echo -e "\n<!-- Types -->") >>$@
|
|
||||||
@( \
|
|
||||||
for ident in $(TYPES) ; do \
|
|
||||||
entity=`echo $$ident | tr _ -` ; \
|
|
||||||
echo "<!ENTITY $$entity \"<link" \
|
|
||||||
"linkend='$$entity'>$$ident</link>\">" >>$@ ; \
|
|
||||||
done)
|
|
||||||
@( \
|
|
||||||
echo -e "\n<!-- Enums -->") >>$@
|
|
||||||
@( \
|
|
||||||
for ident in $(ENUMS) ; do \
|
|
||||||
entity=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -` ; \
|
|
||||||
echo "<!ENTITY $$entity \"enum <link" \
|
|
||||||
"linkend='$$entity'>$$ident</link>\">" >>$@ ; \
|
|
||||||
done)
|
|
||||||
@( \
|
|
||||||
echo -e "\n<!-- Enum definitions -->") >>$@
|
|
||||||
@( \
|
|
||||||
for ident in $(ENUM_DEFS) ; do \
|
|
||||||
entity=`echo $$ident | tr _ -` ; \
|
|
||||||
echo "<!ENTITY $$entity \"<link" \
|
|
||||||
"linkend='$$entity'><constant>$$ident</constant></link>\">" \
|
|
||||||
>>$@ ; \
|
|
||||||
done)
|
|
||||||
@( \
|
|
||||||
echo -e "\n<!-- Structures -->") >>$@
|
|
||||||
@( \
|
|
||||||
for ident in $(STRUCTS) ; do \
|
|
||||||
entity=`echo $$ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \
|
|
||||||
echo "<!ENTITY $$entity \"struct <link" \
|
|
||||||
"linkend='$$entity'>$$ident</link>\">" >>$@ ; \
|
|
||||||
done)
|
|
||||||
@( \
|
|
||||||
echo -e "\n<!-- Error Codes -->") >>$@
|
|
||||||
@( \
|
|
||||||
for ident in $(ERRORS) ; do \
|
|
||||||
echo "<!ENTITY $$ident \"<errorcode>$$ident</errorcode>" \
|
|
||||||
"error code\">" >>$@ ; \
|
|
||||||
done)
|
|
||||||
@( \
|
|
||||||
echo -e "\n<!-- Subsections -->") >>$@
|
|
||||||
@( \
|
|
||||||
for file in $(MEDIA_SGMLS) ; do \
|
|
||||||
entity=`echo "$$file" | sed $(FILENAME) -e s/"^([^-]*)"/sub\1/` ; \
|
|
||||||
if ! echo "$$file" | \
|
|
||||||
grep -q -E -e '^(func|vidioc|pixfmt)-' ; then \
|
|
||||||
echo "<!ENTITY sub-$$entity SYSTEM \"$$file\">" >>$@ ; \
|
|
||||||
fi ; \
|
|
||||||
done)
|
|
||||||
@( \
|
|
||||||
echo -e "\n<!-- Function Reference -->") >>$@
|
|
||||||
@( \
|
|
||||||
for file in $(MEDIA_SGMLS) ; do \
|
|
||||||
if echo "$$file" | \
|
|
||||||
grep -q -E -e '(func|vidioc|pixfmt)-' ; then \
|
|
||||||
entity=`echo "$$file" |sed $(FILENAME)` ; \
|
|
||||||
echo "<!ENTITY $$entity SYSTEM \"$$file\">" >>$@ ; \
|
|
||||||
fi ; \
|
|
||||||
done)
|
|
||||||
|
|
||||||
# Jade can auto-generate a list-of-tables, which includes all structs,
|
|
||||||
# but we only want data types, all types, and sorted please.
|
|
||||||
$(MEDIA_OBJ_DIR)/media-indices.tmpl: $(MEDIA_OBJ_DIR)/v4l2.xml
|
|
||||||
@$($(quiet)gen_xml)
|
|
||||||
@( \
|
|
||||||
echo "<!-- Generated file! Do not edit. -->") >$@
|
|
||||||
@( \
|
|
||||||
echo -e "\n<index><title>List of Types</title>") >>$@
|
|
||||||
@( \
|
|
||||||
for ident in $(TYPES) ; do \
|
|
||||||
id=`echo $$ident | tr _ -` ; \
|
|
||||||
echo "<indexentry><primaryie><link" \
|
|
||||||
"linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
|
|
||||||
done)
|
|
||||||
@( \
|
|
||||||
for ident in $(ENUMS) ; do \
|
|
||||||
id=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -`; \
|
|
||||||
echo "<indexentry><primaryie>enum <link" \
|
|
||||||
"linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
|
|
||||||
done)
|
|
||||||
@( \
|
|
||||||
for ident in $(STRUCTS) ; do \
|
|
||||||
id=`echo $$ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \
|
|
||||||
echo "<indexentry><primaryie>struct <link" \
|
|
||||||
"linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
|
|
||||||
done)
|
|
||||||
@( \
|
|
||||||
echo "</index>") >>$@
|
|
||||||
|
|
||||||
@@ -1,171 +0,0 @@
|
|||||||
iVBORw0KGgoAAAANSUhEUgAAAlgAAACqCAMAAABGfcHVAAAAAXNSR0IArs4c6QAAAwBQTFRFAAIA
|
|
||||||
CAICAAQVEQEBAgsAJgECAAogAwsTAQopHQYBNAEAAAxNARQAERIQAhoDABwAABZEHRQKGRYKQw0F
|
|
||||||
ACMBACUAERwpHR4cVRAFBR5rZhADACR2JiIhBDAGAiWGgQ4AcxQABDYACSeQMSYlJykmESxYlQ4A
|
|
||||||
PSYZIS05OSsJHS5JOC8kAEMDUC8SADXLNDUzADbEAEsAADX/2RABCFIAAD/qxB0AAD//BFgAK0Vp
|
|
||||||
WT4r3hwA3RsTRERAAEf/5CIA2iYCCUv+WUgz7iIAOk5g3CgVSU5SiD8uB2sABm8AE1X/U1RQOFyL
|
|
||||||
4jkfIlz/RV98M1j+G2H/fVk23jtD4T0pXl9ieFtGcV894UIiYWJfAIwA50gOV2p+4kssO2j+dGZx
|
|
||||||
bG1qVmj/OHH/aHJzfnBX5lQ7B50AZnahdXd0AKUG5V1ARnz/6mErCqgAAKsAent46GBIW4GhAK0A
|
|
||||||
AK8B42FtALIOin9/ALUAiIOBALkAVIf/6WxWg4eBi4SKJrEAmoVtdY2geoP/rYVXhoyOqYVuJbUh
|
|
||||||
IrgWX5D/jo6J7nszP7gAsI9S63xnN70zZqO/fZzCOb4+cZr+64dy8otYnJ6b7ImDRcM56IqcWMEo
|
|
||||||
oJb/N8ZoTMRL7Y9/QchcsaOTo6eohaj/7ZqKXspXj6v9xal+oK+7d7vTUM+Afco5r7CumLTVStKV
|
|
||||||
bs9ukbb/9qx/9q9l8queoLv/e9R66beG7rDImNRhi9aDwsPAs8bWzcK2cd67jtqP5MWUodyB8b+1
|
|
||||||
tMr/z8L/j9+kbOXWnN2ZstD7yc7Rzs7Ly9xb183UwdD/+si/qeOmvuKIx9fj4tPCtuWiqOrL+tS2
|
|
||||||
y9v++NPK2dvZt+m0ueq80+Wo3OeSwuy/yezG+d7f/eS/z/DS3uf/6Ono4PC71O39xPb02vPZ/+nR
|
|
||||||
+Ori6e399+vt+PGz+ur65fL55/Xb4vbh7ffX/PPY8vP9+vLy6Pf36fjr/PfM8vjr//f+/vn48P36
|
|
||||||
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
|
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
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
|
|
||||||
RU5ErkJggg==
|
|
||||||
@@ -1,105 +0,0 @@
|
|||||||
R0lGODlhuQJGAeMAAAAAAH9/fwCvAP8AANEA0dEAAK8Ar////wCOAAAA0QAA////////////////
|
|
||||||
/////ywAAAAAuQJGAQAE/vDISau9OOvNu/9gKI5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqP
|
|
||||||
yKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC6bz+i0es1uu9/wuHxOr9vv+Lx+z+/7/4CBgoOEhYaH
|
|
||||||
iImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6gQC9vr/A
|
|
||||||
wcLDxMXGx8jJysvMzc7P0NHS09TV1tfYxbth2d3e3+DRAePk5ebn6Onl4ezt7u3q8fLqANtg7/j5
|
|
||||||
+s/z/f4B+wIKHAjsn8F09ex5IciwobuDEM1Bi0ixosWLGDNqrJhQIZdk/htDihxJsiTJiSZTqlzJ
|
|
||||||
MmNHj1q+tRznsKbNmzhzDoz3EiYWmTN7+vQJgOfQmN5mAjzKtCg9pj+TBoU61ClCqlaAthSKVZdV
|
|
||||||
dFy7NtHKMqxYW1/PmT2bhOzKtWxlpZUYF4pblXDrvpq7Tq+Tu+UGCB5MuLDhw4gTK17MuLHjx5Aj
|
|
||||||
S55MubLly5gza95MmVxev0EAkxsg8jNoVXNJ0zy9RPQ41RtNsz6V2vPstlLTwdYo+zap2qt9G3Ed
|
|
||||||
YLdL4bGAL0VOhLhxjL2Zf1IeXboM56Wtt6KuPXRudM8vVu+eiTt5H9hDjj9vyfyIXrTW80gfO4OC
|
|
||||||
+/jz69/Pv7///wAG/ijggAQWaOCBCCao4IIMNujggRe4J4IwBxBg4YUYZqjhhhx26OGHIIYo4ogk
|
|
||||||
loihMBbi1k084VlklgLsWQKjBRJqgIwEBJRyY4UqZsNidhjMGOMkQlLgnjERwkdBjuVpk2QFTB5B
|
|
||||||
H2/2DUlJkRNYhWQKUTKyJQpdFjHlcUFaSaQxo9nGQph/fCkDm0OMCV2VZh7iZpbnwCYfBnDKcecO
|
|
||||||
fXq3ojotckRnnXr8SQGWEtQIphuKEhEoEHKKdygHCUiQ6QEJdDrEphWA2oGo3UXaAaMHOHrCpFmY
|
|
||||||
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
|
|
||||||
1
Documentation/DocBook/media/dvb/.gitignore
vendored
1
Documentation/DocBook/media/dvb/.gitignore
vendored
@@ -1 +0,0 @@
|
|||||||
!*.xml
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,582 +0,0 @@
|
|||||||
<title>DVB CA Device</title>
|
|
||||||
<para>The DVB CA device controls the conditional access hardware. It can be accessed through
|
|
||||||
<constant>/dev/dvb/adapter?/ca?</constant>. Data types and and ioctl definitions can be accessed by
|
|
||||||
including <constant>linux/dvb/ca.h</constant> in your application.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<section id="ca_data_types">
|
|
||||||
<title>CA Data Types</title>
|
|
||||||
|
|
||||||
|
|
||||||
<section id="ca-slot-info">
|
|
||||||
<title>ca_slot_info_t</title>
|
|
||||||
<programlisting>
|
|
||||||
typedef struct ca_slot_info {
|
|
||||||
int num; /⋆ slot number ⋆/
|
|
||||||
|
|
||||||
int type; /⋆ CA interface this slot supports ⋆/
|
|
||||||
#define CA_CI 1 /⋆ CI high level interface ⋆/
|
|
||||||
#define CA_CI_LINK 2 /⋆ CI link layer level interface ⋆/
|
|
||||||
#define CA_CI_PHYS 4 /⋆ CI physical layer level interface ⋆/
|
|
||||||
#define CA_DESCR 8 /⋆ built-in descrambler ⋆/
|
|
||||||
#define CA_SC 128 /⋆ simple smart card interface ⋆/
|
|
||||||
|
|
||||||
unsigned int flags;
|
|
||||||
#define CA_CI_MODULE_PRESENT 1 /⋆ module (or card) inserted ⋆/
|
|
||||||
#define CA_CI_MODULE_READY 2
|
|
||||||
} ca_slot_info_t;
|
|
||||||
</programlisting>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section id="ca-descr-info">
|
|
||||||
<title>ca_descr_info_t</title>
|
|
||||||
<programlisting>
|
|
||||||
typedef struct ca_descr_info {
|
|
||||||
unsigned int num; /⋆ number of available descramblers (keys) ⋆/
|
|
||||||
unsigned int type; /⋆ type of supported scrambling system ⋆/
|
|
||||||
#define CA_ECD 1
|
|
||||||
#define CA_NDS 2
|
|
||||||
#define CA_DSS 4
|
|
||||||
} ca_descr_info_t;
|
|
||||||
</programlisting>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section id="ca-caps">
|
|
||||||
<title>ca_caps_t</title>
|
|
||||||
<programlisting>
|
|
||||||
typedef struct ca_caps {
|
|
||||||
unsigned int slot_num; /⋆ total number of CA card and module slots ⋆/
|
|
||||||
unsigned int slot_type; /⋆ OR of all supported types ⋆/
|
|
||||||
unsigned int descr_num; /⋆ total number of descrambler slots (keys) ⋆/
|
|
||||||
unsigned int descr_type;/⋆ OR of all supported types ⋆/
|
|
||||||
} ca_cap_t;
|
|
||||||
</programlisting>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section id="ca-msg">
|
|
||||||
<title>ca_msg_t</title>
|
|
||||||
<programlisting>
|
|
||||||
/⋆ a message to/from a CI-CAM ⋆/
|
|
||||||
typedef struct ca_msg {
|
|
||||||
unsigned int index;
|
|
||||||
unsigned int type;
|
|
||||||
unsigned int length;
|
|
||||||
unsigned char msg[256];
|
|
||||||
} ca_msg_t;
|
|
||||||
</programlisting>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section id="ca-descr">
|
|
||||||
<title>ca_descr_t</title>
|
|
||||||
<programlisting>
|
|
||||||
typedef struct ca_descr {
|
|
||||||
unsigned int index;
|
|
||||||
unsigned int parity;
|
|
||||||
unsigned char cw[8];
|
|
||||||
} ca_descr_t;
|
|
||||||
</programlisting>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="ca-pid">
|
|
||||||
<title>ca-pid</title>
|
|
||||||
<programlisting>
|
|
||||||
typedef struct ca_pid {
|
|
||||||
unsigned int pid;
|
|
||||||
int index; /⋆ -1 == disable⋆/
|
|
||||||
} ca_pid_t;
|
|
||||||
</programlisting>
|
|
||||||
</section></section>
|
|
||||||
|
|
||||||
<section id="ca_function_calls">
|
|
||||||
<title>CA Function Calls</title>
|
|
||||||
|
|
||||||
|
|
||||||
<section id="ca_fopen">
|
|
||||||
<title>open()</title>
|
|
||||||
<para>DESCRIPTION
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>This system call opens a named ca device (e.g. /dev/ost/ca) for subsequent use.</para>
|
|
||||||
<para>When an open() call has succeeded, the device will be ready for use.
|
|
||||||
The significance of blocking or non-blocking mode is described in the
|
|
||||||
documentation for functions where there is a difference. It does not affect the
|
|
||||||
semantics of the open() call itself. A device opened in blocking mode can later
|
|
||||||
be put into non-blocking mode (and vice versa) using the F_SETFL command
|
|
||||||
of the fcntl system call. This is a standard system call, documented in the Linux
|
|
||||||
manual page for fcntl. Only one user can open the CA Device in O_RDWR
|
|
||||||
mode. All other attempts to open the device in this mode will fail, and an error
|
|
||||||
code will be returned.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>SYNOPSIS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int open(const char ⋆deviceName, int flags);</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>PARAMETERS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>const char
|
|
||||||
*deviceName</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Name of specific video device.</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int flags</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>A bit-wise OR of the following flags:</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>O_RDONLY read-only access</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>O_RDWR read/write access</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>O_NONBLOCK open in non-blocking mode</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>(blocking mode is the default)</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>RETURN VALUE</para>
|
|
||||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>ENODEV</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Device driver not loaded/available.</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>EINTERNAL</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Internal error.</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>EBUSY</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Device or resource busy.</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>EINVAL</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Invalid argument.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section id="ca_fclose">
|
|
||||||
<title>close()</title>
|
|
||||||
<para>DESCRIPTION
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>This system call closes a previously opened audio device.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>SYNOPSIS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int close(int fd);</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>PARAMETERS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int fd</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>File descriptor returned by a previous call to open().</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>RETURN VALUE</para>
|
|
||||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>EBADF</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>fd is not a valid open file descriptor.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="CA_RESET"
|
|
||||||
role="subsection"><title>CA_RESET</title>
|
|
||||||
<para>DESCRIPTION
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>This ioctl is undocumented. Documentation is welcome.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>SYNOPSIS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int ioctl(fd, int request = CA_RESET);
|
|
||||||
</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>PARAMETERS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int fd</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>File descriptor returned by a previous call to open().</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int request</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Equals CA_RESET for this command.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
&return-value-dvb;
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="CA_GET_CAP"
|
|
||||||
role="subsection"><title>CA_GET_CAP</title>
|
|
||||||
<para>DESCRIPTION
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>This ioctl is undocumented. Documentation is welcome.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>SYNOPSIS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int ioctl(fd, int request = CA_GET_CAP,
|
|
||||||
ca_caps_t *);</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>PARAMETERS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int fd</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>File descriptor returned by a previous call to open().</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int request</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Equals CA_GET_CAP for this command.</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>ca_caps_t *
|
|
||||||
</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Undocumented.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
&return-value-dvb;
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="CA_GET_SLOT_INFO"
|
|
||||||
role="subsection"><title>CA_GET_SLOT_INFO</title>
|
|
||||||
<para>DESCRIPTION
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>This ioctl is undocumented. Documentation is welcome.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>SYNOPSIS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int ioctl(fd, int request = CA_GET_SLOT_INFO,
|
|
||||||
ca_slot_info_t *);</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>PARAMETERS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int fd</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>File descriptor returned by a previous call to open().</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int request</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Equals CA_GET_SLOT_INFO for this command.</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>ca_slot_info_t *
|
|
||||||
</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Undocumented.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
&return-value-dvb;
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="CA_GET_DESCR_INFO"
|
|
||||||
role="subsection"><title>CA_GET_DESCR_INFO</title>
|
|
||||||
<para>DESCRIPTION
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>This ioctl is undocumented. Documentation is welcome.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>SYNOPSIS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int ioctl(fd, int request = CA_GET_DESCR_INFO,
|
|
||||||
ca_descr_info_t *);</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>PARAMETERS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int fd</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>File descriptor returned by a previous call to open().</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int request</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Equals CA_GET_DESCR_INFO for this command.</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>ca_descr_info_t *
|
|
||||||
</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Undocumented.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
&return-value-dvb;
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="CA_GET_MSG"
|
|
||||||
role="subsection"><title>CA_GET_MSG</title>
|
|
||||||
<para>DESCRIPTION
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>This ioctl is undocumented. Documentation is welcome.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>SYNOPSIS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int ioctl(fd, int request = CA_GET_MSG,
|
|
||||||
ca_msg_t *);</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>PARAMETERS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int fd</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>File descriptor returned by a previous call to open().</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int request</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Equals CA_GET_MSG for this command.</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>ca_msg_t *
|
|
||||||
</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Undocumented.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
&return-value-dvb;
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="CA_SEND_MSG"
|
|
||||||
role="subsection"><title>CA_SEND_MSG</title>
|
|
||||||
<para>DESCRIPTION
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>This ioctl is undocumented. Documentation is welcome.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>SYNOPSIS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int ioctl(fd, int request = CA_SEND_MSG,
|
|
||||||
ca_msg_t *);</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>PARAMETERS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int fd</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>File descriptor returned by a previous call to open().</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int request</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Equals CA_SEND_MSG for this command.</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>ca_msg_t *
|
|
||||||
</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Undocumented.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
&return-value-dvb;
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="CA_SET_DESCR"
|
|
||||||
role="subsection"><title>CA_SET_DESCR</title>
|
|
||||||
<para>DESCRIPTION
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>This ioctl is undocumented. Documentation is welcome.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>SYNOPSIS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int ioctl(fd, int request = CA_SET_DESCR,
|
|
||||||
ca_descr_t *);</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>PARAMETERS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int fd</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>File descriptor returned by a previous call to open().</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int request</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Equals CA_SET_DESCR for this command.</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>ca_descr_t *
|
|
||||||
</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Undocumented.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
&return-value-dvb;
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="CA_SET_PID"
|
|
||||||
role="subsection"><title>CA_SET_PID</title>
|
|
||||||
<para>DESCRIPTION
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>This ioctl is undocumented. Documentation is welcome.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>SYNOPSIS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int ioctl(fd, int request = CA_SET_PID,
|
|
||||||
ca_pid_t *);</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>PARAMETERS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int fd</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>File descriptor returned by a previous call to open().</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int request</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Equals CA_SET_PID for this command.</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>ca_pid_t *
|
|
||||||
</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Undocumented.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
&return-value-dvb;
|
|
||||||
</section>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,156 +0,0 @@
|
|||||||
<partinfo>
|
|
||||||
<authorgroup>
|
|
||||||
<author>
|
|
||||||
<firstname>Ralph</firstname>
|
|
||||||
<surname>Metzler</surname>
|
|
||||||
<othername role="mi">J. K.</othername>
|
|
||||||
<affiliation><address><email>rjkm@metzlerbros.de</email></address></affiliation>
|
|
||||||
</author>
|
|
||||||
<author>
|
|
||||||
<firstname>Marcus</firstname>
|
|
||||||
<surname>Metzler</surname>
|
|
||||||
<othername role="mi">O. C.</othername>
|
|
||||||
<affiliation><address><email>rjkm@metzlerbros.de</email></address></affiliation>
|
|
||||||
</author>
|
|
||||||
</authorgroup>
|
|
||||||
<authorgroup>
|
|
||||||
<author>
|
|
||||||
<firstname>Mauro</firstname>
|
|
||||||
<othername role="mi">Carvalho</othername>
|
|
||||||
<surname>Chehab</surname>
|
|
||||||
<affiliation><address><email>m.chehab@samsung.com</email></address></affiliation>
|
|
||||||
<contrib>Ported document to Docbook XML.</contrib>
|
|
||||||
</author>
|
|
||||||
</authorgroup>
|
|
||||||
<copyright>
|
|
||||||
<year>2002</year>
|
|
||||||
<year>2003</year>
|
|
||||||
<holder>Convergence GmbH</holder>
|
|
||||||
</copyright>
|
|
||||||
<copyright>
|
|
||||||
<year>2009-2015</year>
|
|
||||||
<holder>Mauro Carvalho Chehab</holder>
|
|
||||||
</copyright>
|
|
||||||
|
|
||||||
<revhistory>
|
|
||||||
<!-- Put document revisions here, newest first. -->
|
|
||||||
<revision>
|
|
||||||
<revnumber>2.1.0</revnumber>
|
|
||||||
<date>2015-05-29</date>
|
|
||||||
<authorinitials>mcc</authorinitials>
|
|
||||||
<revremark>
|
|
||||||
DocBook improvements and cleanups, in order to document the
|
|
||||||
system calls on a more standard way and provide more description
|
|
||||||
about the current DVB API.
|
|
||||||
</revremark>
|
|
||||||
</revision>
|
|
||||||
<revision>
|
|
||||||
<revnumber>2.0.4</revnumber>
|
|
||||||
<date>2011-05-06</date>
|
|
||||||
<authorinitials>mcc</authorinitials>
|
|
||||||
<revremark>
|
|
||||||
Add more information about DVB APIv5, better describing the frontend GET/SET props ioctl's.
|
|
||||||
</revremark>
|
|
||||||
</revision>
|
|
||||||
<revision>
|
|
||||||
<revnumber>2.0.3</revnumber>
|
|
||||||
<date>2010-07-03</date>
|
|
||||||
<authorinitials>mcc</authorinitials>
|
|
||||||
<revremark>
|
|
||||||
Add some frontend capabilities flags, present on kernel, but missing at the specs.
|
|
||||||
</revremark>
|
|
||||||
</revision>
|
|
||||||
<revision>
|
|
||||||
<revnumber>2.0.2</revnumber>
|
|
||||||
<date>2009-10-25</date>
|
|
||||||
<authorinitials>mcc</authorinitials>
|
|
||||||
<revremark>
|
|
||||||
documents FE_SET_FRONTEND_TUNE_MODE and FE_DISHETWORK_SEND_LEGACY_CMD ioctls.
|
|
||||||
</revremark>
|
|
||||||
</revision>
|
|
||||||
<revision>
|
|
||||||
<revnumber>2.0.1</revnumber>
|
|
||||||
<date>2009-09-16</date>
|
|
||||||
<authorinitials>mcc</authorinitials>
|
|
||||||
<revremark>
|
|
||||||
Added ISDB-T test originally written by Patrick Boettcher
|
|
||||||
</revremark>
|
|
||||||
</revision>
|
|
||||||
<revision>
|
|
||||||
<revnumber>2.0.0</revnumber>
|
|
||||||
<date>2009-09-06</date>
|
|
||||||
<authorinitials>mcc</authorinitials>
|
|
||||||
<revremark>Conversion from LaTex to DocBook XML. The
|
|
||||||
contents is the same as the original LaTex version.</revremark>
|
|
||||||
</revision>
|
|
||||||
<revision>
|
|
||||||
<revnumber>1.0.0</revnumber>
|
|
||||||
<date>2003-07-24</date>
|
|
||||||
<authorinitials>rjkm</authorinitials>
|
|
||||||
<revremark>Initial revision on LaTEX.</revremark>
|
|
||||||
</revision>
|
|
||||||
</revhistory>
|
|
||||||
</partinfo>
|
|
||||||
|
|
||||||
|
|
||||||
<title>LINUX DVB API</title>
|
|
||||||
<subtitle>Version 5.10</subtitle>
|
|
||||||
<!-- ADD THE CHAPTERS HERE -->
|
|
||||||
<chapter id="dvb_introdution">
|
|
||||||
&sub-intro;
|
|
||||||
</chapter>
|
|
||||||
<chapter id="dvb_frontend">
|
|
||||||
&sub-frontend;
|
|
||||||
</chapter>
|
|
||||||
<chapter id="dvb_demux">
|
|
||||||
&sub-demux;
|
|
||||||
</chapter>
|
|
||||||
<chapter id="dvb_ca">
|
|
||||||
&sub-ca;
|
|
||||||
</chapter>
|
|
||||||
<chapter id="net">
|
|
||||||
&sub-net;
|
|
||||||
</chapter>
|
|
||||||
<chapter id="legacy_dvb_apis">
|
|
||||||
<title>DVB Deprecated APIs</title>
|
|
||||||
<para>The APIs described here are kept only for historical reasons. There's
|
|
||||||
just one driver for a very legacy hardware that uses this API. No
|
|
||||||
modern drivers should use it. Instead, audio and video should be using
|
|
||||||
the V4L2 and ALSA APIs, and the pipelines should be set using the
|
|
||||||
Media Controller API</para>
|
|
||||||
<section id="dvb_video">
|
|
||||||
&sub-video;
|
|
||||||
</section>
|
|
||||||
<section id="dvb_audio">
|
|
||||||
&sub-audio;
|
|
||||||
</section>
|
|
||||||
</chapter>
|
|
||||||
<chapter id="dvb_examples">
|
|
||||||
&sub-examples;
|
|
||||||
</chapter>
|
|
||||||
<!-- END OF CHAPTERS -->
|
|
||||||
<appendix id="audio_h">
|
|
||||||
<title>DVB Audio Header File</title>
|
|
||||||
&sub-audio-h;
|
|
||||||
</appendix>
|
|
||||||
<appendix id="ca_h">
|
|
||||||
<title>DVB Conditional Access Header File</title>
|
|
||||||
&sub-ca-h;
|
|
||||||
</appendix>
|
|
||||||
<appendix id="dmx_h">
|
|
||||||
<title>DVB Demux Header File</title>
|
|
||||||
&sub-dmx-h;
|
|
||||||
</appendix>
|
|
||||||
<appendix id="frontend_h">
|
|
||||||
<title>DVB Frontend Header File</title>
|
|
||||||
&sub-frontend-h;
|
|
||||||
</appendix>
|
|
||||||
<appendix id="net_h">
|
|
||||||
<title>DVB Network Header File</title>
|
|
||||||
&sub-net-h;
|
|
||||||
</appendix>
|
|
||||||
<appendix id="video_h">
|
|
||||||
<title>DVB Video Header File</title>
|
|
||||||
&sub-video-h;
|
|
||||||
</appendix>
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,367 +0,0 @@
|
|||||||
<title>Examples</title>
|
|
||||||
<para>In this section we would like to present some examples for using the DVB API.
|
|
||||||
</para>
|
|
||||||
<para>NOTE: This section is out of date, and the code below won't even
|
|
||||||
compile. Please refer to the
|
|
||||||
<ulink url="https://linuxtv.org/docs/libdvbv5/index.html">libdvbv5</ulink>
|
|
||||||
for updated/recommended examples.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<section id="tuning">
|
|
||||||
<title>Tuning</title>
|
|
||||||
<para>We will start with a generic tuning subroutine that uses the frontend and SEC, as well as
|
|
||||||
the demux devices. The example is given for QPSK tuners, but can easily be adjusted for
|
|
||||||
QAM.
|
|
||||||
</para>
|
|
||||||
<programlisting>
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include <linux/dvb/dmx.h>
|
|
||||||
#include <linux/dvb/frontend.h>
|
|
||||||
#include <linux/dvb/sec.h>
|
|
||||||
#include <sys/poll.h>
|
|
||||||
|
|
||||||
#define DMX "/dev/dvb/adapter0/demux1"
|
|
||||||
#define FRONT "/dev/dvb/adapter0/frontend1"
|
|
||||||
#define SEC "/dev/dvb/adapter0/sec1"
|
|
||||||
|
|
||||||
/⋆ routine for checking if we have a signal and other status information⋆/
|
|
||||||
int FEReadStatus(int fd, fe_status_t ⋆stat)
|
|
||||||
{
|
|
||||||
int ans;
|
|
||||||
|
|
||||||
if ( (ans = ioctl(fd,FE_READ_STATUS,stat) < 0)){
|
|
||||||
perror("FE READ STATUS: ");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (⋆stat & FE_HAS_POWER)
|
|
||||||
printf("FE HAS POWER\n");
|
|
||||||
|
|
||||||
if (⋆stat & FE_HAS_SIGNAL)
|
|
||||||
printf("FE HAS SIGNAL\n");
|
|
||||||
|
|
||||||
if (⋆stat & FE_SPECTRUM_INV)
|
|
||||||
printf("SPEKTRUM INV\n");
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/⋆ tune qpsk ⋆/
|
|
||||||
/⋆ freq: frequency of transponder ⋆/
|
|
||||||
/⋆ vpid, apid, tpid: PIDs of video, audio and teletext TS packets ⋆/
|
|
||||||
/⋆ diseqc: DiSEqC address of the used LNB ⋆/
|
|
||||||
/⋆ pol: Polarisation ⋆/
|
|
||||||
/⋆ srate: Symbol Rate ⋆/
|
|
||||||
/⋆ fec. FEC ⋆/
|
|
||||||
/⋆ lnb_lof1: local frequency of lower LNB band ⋆/
|
|
||||||
/⋆ lnb_lof2: local frequency of upper LNB band ⋆/
|
|
||||||
/⋆ lnb_slof: switch frequency of LNB ⋆/
|
|
||||||
|
|
||||||
int set_qpsk_channel(int freq, int vpid, int apid, int tpid,
|
|
||||||
int diseqc, int pol, int srate, int fec, int lnb_lof1,
|
|
||||||
int lnb_lof2, int lnb_slof)
|
|
||||||
{
|
|
||||||
struct secCommand scmd;
|
|
||||||
struct secCmdSequence scmds;
|
|
||||||
struct dmx_pes_filter_params pesFilterParams;
|
|
||||||
FrontendParameters frp;
|
|
||||||
struct pollfd pfd[1];
|
|
||||||
FrontendEvent event;
|
|
||||||
int demux1, demux2, demux3, front;
|
|
||||||
|
|
||||||
frequency = (uint32_t) freq;
|
|
||||||
symbolrate = (uint32_t) srate;
|
|
||||||
|
|
||||||
if((front = open(FRONT,O_RDWR)) < 0){
|
|
||||||
perror("FRONTEND DEVICE: ");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if((sec = open(SEC,O_RDWR)) < 0){
|
|
||||||
perror("SEC DEVICE: ");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (demux1 < 0){
|
|
||||||
if ((demux1=open(DMX, O_RDWR|O_NONBLOCK))
|
|
||||||
< 0){
|
|
||||||
perror("DEMUX DEVICE: ");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (demux2 < 0){
|
|
||||||
if ((demux2=open(DMX, O_RDWR|O_NONBLOCK))
|
|
||||||
< 0){
|
|
||||||
perror("DEMUX DEVICE: ");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (demux3 < 0){
|
|
||||||
if ((demux3=open(DMX, O_RDWR|O_NONBLOCK))
|
|
||||||
< 0){
|
|
||||||
perror("DEMUX DEVICE: ");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (freq < lnb_slof) {
|
|
||||||
frp.Frequency = (freq - lnb_lof1);
|
|
||||||
scmds.continuousTone = SEC_TONE_OFF;
|
|
||||||
} else {
|
|
||||||
frp.Frequency = (freq - lnb_lof2);
|
|
||||||
scmds.continuousTone = SEC_TONE_ON;
|
|
||||||
}
|
|
||||||
frp.Inversion = INVERSION_AUTO;
|
|
||||||
if (pol) scmds.voltage = SEC_VOLTAGE_18;
|
|
||||||
else scmds.voltage = SEC_VOLTAGE_13;
|
|
||||||
|
|
||||||
scmd.type=0;
|
|
||||||
scmd.u.diseqc.addr=0x10;
|
|
||||||
scmd.u.diseqc.cmd=0x38;
|
|
||||||
scmd.u.diseqc.numParams=1;
|
|
||||||
scmd.u.diseqc.params[0] = 0xF0 | ((diseqc ⋆ 4) & 0x0F) |
|
|
||||||
(scmds.continuousTone == SEC_TONE_ON ? 1 : 0) |
|
|
||||||
(scmds.voltage==SEC_VOLTAGE_18 ? 2 : 0);
|
|
||||||
|
|
||||||
scmds.miniCommand=SEC_MINI_NONE;
|
|
||||||
scmds.numCommands=1;
|
|
||||||
scmds.commands=&scmd;
|
|
||||||
if (ioctl(sec, SEC_SEND_SEQUENCE, &scmds) < 0){
|
|
||||||
perror("SEC SEND: ");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ioctl(sec, SEC_SEND_SEQUENCE, &scmds) < 0){
|
|
||||||
perror("SEC SEND: ");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
frp.u.qpsk.SymbolRate = srate;
|
|
||||||
frp.u.qpsk.FEC_inner = fec;
|
|
||||||
|
|
||||||
if (ioctl(front, FE_SET_FRONTEND, &frp) < 0){
|
|
||||||
perror("QPSK TUNE: ");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
pfd[0].fd = front;
|
|
||||||
pfd[0].events = POLLIN;
|
|
||||||
|
|
||||||
if (poll(pfd,1,3000)){
|
|
||||||
if (pfd[0].revents & POLLIN){
|
|
||||||
printf("Getting QPSK event\n");
|
|
||||||
if ( ioctl(front, FE_GET_EVENT, &event)
|
|
||||||
|
|
||||||
== -EOVERFLOW){
|
|
||||||
perror("qpsk get event");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
printf("Received ");
|
|
||||||
switch(event.type){
|
|
||||||
case FE_UNEXPECTED_EV:
|
|
||||||
printf("unexpected event\n");
|
|
||||||
return -1;
|
|
||||||
case FE_FAILURE_EV:
|
|
||||||
printf("failure event\n");
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
case FE_COMPLETION_EV:
|
|
||||||
printf("completion event\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
pesFilterParams.pid = vpid;
|
|
||||||
pesFilterParams.input = DMX_IN_FRONTEND;
|
|
||||||
pesFilterParams.output = DMX_OUT_DECODER;
|
|
||||||
pesFilterParams.pes_type = DMX_PES_VIDEO;
|
|
||||||
pesFilterParams.flags = DMX_IMMEDIATE_START;
|
|
||||||
if (ioctl(demux1, DMX_SET_PES_FILTER, &pesFilterParams) < 0){
|
|
||||||
perror("set_vpid");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
pesFilterParams.pid = apid;
|
|
||||||
pesFilterParams.input = DMX_IN_FRONTEND;
|
|
||||||
pesFilterParams.output = DMX_OUT_DECODER;
|
|
||||||
pesFilterParams.pes_type = DMX_PES_AUDIO;
|
|
||||||
pesFilterParams.flags = DMX_IMMEDIATE_START;
|
|
||||||
if (ioctl(demux2, DMX_SET_PES_FILTER, &pesFilterParams) < 0){
|
|
||||||
perror("set_apid");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
pesFilterParams.pid = tpid;
|
|
||||||
pesFilterParams.input = DMX_IN_FRONTEND;
|
|
||||||
pesFilterParams.output = DMX_OUT_DECODER;
|
|
||||||
pesFilterParams.pes_type = DMX_PES_TELETEXT;
|
|
||||||
pesFilterParams.flags = DMX_IMMEDIATE_START;
|
|
||||||
if (ioctl(demux3, DMX_SET_PES_FILTER, &pesFilterParams) < 0){
|
|
||||||
perror("set_tpid");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return has_signal(fds);
|
|
||||||
}
|
|
||||||
|
|
||||||
</programlisting>
|
|
||||||
<para>The program assumes that you are using a universal LNB and a standard DiSEqC
|
|
||||||
switch with up to 4 addresses. Of course, you could build in some more checking if
|
|
||||||
tuning was successful and maybe try to repeat the tuning process. Depending on the
|
|
||||||
external hardware, i.e. LNB and DiSEqC switch, and weather conditions this may be
|
|
||||||
necessary.
|
|
||||||
</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="the_dvr_device">
|
|
||||||
<title>The DVR device</title>
|
|
||||||
<para>The following program code shows how to use the DVR device for recording.
|
|
||||||
</para>
|
|
||||||
<programlisting>
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include <linux/dvb/dmx.h>
|
|
||||||
#include <linux/dvb/video.h>
|
|
||||||
#include <sys/poll.h>
|
|
||||||
#define DVR "/dev/dvb/adapter0/dvr1"
|
|
||||||
#define AUDIO "/dev/dvb/adapter0/audio1"
|
|
||||||
#define VIDEO "/dev/dvb/adapter0/video1"
|
|
||||||
|
|
||||||
#define BUFFY (188⋆20)
|
|
||||||
#define MAX_LENGTH (1024⋆1024⋆5) /⋆ record 5MB ⋆/
|
|
||||||
|
|
||||||
|
|
||||||
/⋆ switch the demuxes to recording, assuming the transponder is tuned ⋆/
|
|
||||||
|
|
||||||
/⋆ demux1, demux2: file descriptor of video and audio filters ⋆/
|
|
||||||
/⋆ vpid, apid: PIDs of video and audio channels ⋆/
|
|
||||||
|
|
||||||
int switch_to_record(int demux1, int demux2, uint16_t vpid, uint16_t apid)
|
|
||||||
{
|
|
||||||
struct dmx_pes_filter_params pesFilterParams;
|
|
||||||
|
|
||||||
if (demux1 < 0){
|
|
||||||
if ((demux1=open(DMX, O_RDWR|O_NONBLOCK))
|
|
||||||
< 0){
|
|
||||||
perror("DEMUX DEVICE: ");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (demux2 < 0){
|
|
||||||
if ((demux2=open(DMX, O_RDWR|O_NONBLOCK))
|
|
||||||
< 0){
|
|
||||||
perror("DEMUX DEVICE: ");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pesFilterParams.pid = vpid;
|
|
||||||
pesFilterParams.input = DMX_IN_FRONTEND;
|
|
||||||
pesFilterParams.output = DMX_OUT_TS_TAP;
|
|
||||||
pesFilterParams.pes_type = DMX_PES_VIDEO;
|
|
||||||
pesFilterParams.flags = DMX_IMMEDIATE_START;
|
|
||||||
if (ioctl(demux1, DMX_SET_PES_FILTER, &pesFilterParams) < 0){
|
|
||||||
perror("DEMUX DEVICE");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
pesFilterParams.pid = apid;
|
|
||||||
pesFilterParams.input = DMX_IN_FRONTEND;
|
|
||||||
pesFilterParams.output = DMX_OUT_TS_TAP;
|
|
||||||
pesFilterParams.pes_type = DMX_PES_AUDIO;
|
|
||||||
pesFilterParams.flags = DMX_IMMEDIATE_START;
|
|
||||||
if (ioctl(demux2, DMX_SET_PES_FILTER, &pesFilterParams) < 0){
|
|
||||||
perror("DEMUX DEVICE");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/⋆ start recording MAX_LENGTH , assuming the transponder is tuned ⋆/
|
|
||||||
|
|
||||||
/⋆ demux1, demux2: file descriptor of video and audio filters ⋆/
|
|
||||||
/⋆ vpid, apid: PIDs of video and audio channels ⋆/
|
|
||||||
int record_dvr(int demux1, int demux2, uint16_t vpid, uint16_t apid)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int len;
|
|
||||||
int written;
|
|
||||||
uint8_t buf[BUFFY];
|
|
||||||
uint64_t length;
|
|
||||||
struct pollfd pfd[1];
|
|
||||||
int dvr, dvr_out;
|
|
||||||
|
|
||||||
/⋆ open dvr device ⋆/
|
|
||||||
if ((dvr = open(DVR, O_RDONLY|O_NONBLOCK)) < 0){
|
|
||||||
perror("DVR DEVICE");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/⋆ switch video and audio demuxes to dvr ⋆/
|
|
||||||
printf ("Switching dvr on\n");
|
|
||||||
i = switch_to_record(demux1, demux2, vpid, apid);
|
|
||||||
printf("finished: ");
|
|
||||||
|
|
||||||
printf("Recording %2.0f MB of test file in TS format\n",
|
|
||||||
MAX_LENGTH/(1024.0⋆1024.0));
|
|
||||||
length = 0;
|
|
||||||
|
|
||||||
/⋆ open output file ⋆/
|
|
||||||
if ((dvr_out = open(DVR_FILE,O_WRONLY|O_CREAT
|
|
||||||
|O_TRUNC, S_IRUSR|S_IWUSR
|
|
||||||
|S_IRGRP|S_IWGRP|S_IROTH|
|
|
||||||
S_IWOTH)) < 0){
|
|
||||||
perror("Can't open file for dvr test");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
pfd[0].fd = dvr;
|
|
||||||
pfd[0].events = POLLIN;
|
|
||||||
|
|
||||||
/⋆ poll for dvr data and write to file ⋆/
|
|
||||||
while (length < MAX_LENGTH ) {
|
|
||||||
if (poll(pfd,1,1)){
|
|
||||||
if (pfd[0].revents & POLLIN){
|
|
||||||
len = read(dvr, buf, BUFFY);
|
|
||||||
if (len < 0){
|
|
||||||
perror("recording");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (len > 0){
|
|
||||||
written = 0;
|
|
||||||
while (written < len)
|
|
||||||
written +=
|
|
||||||
write (dvr_out,
|
|
||||||
buf, len);
|
|
||||||
length += len;
|
|
||||||
printf("written %2.0f MB\r",
|
|
||||||
length/1024./1024.);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
</programlisting>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
@@ -1,78 +0,0 @@
|
|||||||
<refentry id="FE_DISEQC_RECV_SLAVE_REPLY">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>ioctl FE_DISEQC_RECV_SLAVE_REPLY</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>FE_DISEQC_RECV_SLAVE_REPLY</refname>
|
|
||||||
<refpurpose>Receives reply from a DiSEqC 2.0 command</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>ioctl</function></funcdef>
|
|
||||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>request</parameter></paramdef>
|
|
||||||
<paramdef>struct dvb_diseqc_slave_reply *<parameter>argp</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>fd</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>&fe_fd;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>request</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>FE_DISEQC_RECV_SLAVE_REPLY</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>argp</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>pointer to &dvb-diseqc-slave-reply;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
|
|
||||||
<para>Receives reply from a DiSEqC 2.0 command.</para>
|
|
||||||
&return-value-dvb;
|
|
||||||
|
|
||||||
<table pgwide="1" frame="none" id="dvb-diseqc-slave-reply">
|
|
||||||
<title>struct <structname>dvb_diseqc_slave_reply</structname></title>
|
|
||||||
<tgroup cols="3">
|
|
||||||
&cs-str;
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry>uint8_t</entry>
|
|
||||||
<entry>msg[4]</entry>
|
|
||||||
<entry>DiSEqC message (framing, data[3])</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry>uint8_t</entry>
|
|
||||||
<entry>msg_len</entry>
|
|
||||||
<entry>Length of the DiSEqC message. Valid values are 0 to 4,
|
|
||||||
where 0 means no msg</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry>int</entry>
|
|
||||||
<entry>timeout</entry>
|
|
||||||
<entry>Return from ioctl after timeout ms with errorcode when no
|
|
||||||
message was received</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
<refentry id="FE_DISEQC_RESET_OVERLOAD">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>ioctl FE_DISEQC_RESET_OVERLOAD</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>FE_DISEQC_RESET_OVERLOAD</refname>
|
|
||||||
<refpurpose>Restores the power to the antenna subsystem, if it was powered
|
|
||||||
off due to power overload.</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>ioctl</function></funcdef>
|
|
||||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>request</parameter></paramdef>
|
|
||||||
<paramdef>NULL</paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>fd</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>&fe_fd;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>request</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>FE_DISEQC_RESET_OVERLOAD</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
|
|
||||||
<para>If the bus has been automatically powered off due to power overload, this ioctl
|
|
||||||
call restores the power to the bus. The call requires read/write access to the
|
|
||||||
device. This call has no effect if the device is manually powered off. Not all
|
|
||||||
DVB adapters support this ioctl.</para>
|
|
||||||
&return-value-dvb;
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
@@ -1,89 +0,0 @@
|
|||||||
<refentry id="FE_DISEQC_SEND_BURST">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>ioctl FE_DISEQC_SEND_BURST</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>FE_DISEQC_SEND_BURST</refname>
|
|
||||||
<refpurpose>Sends a 22KHz tone burst for 2x1 mini DiSEqC satellite selection.</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>ioctl</function></funcdef>
|
|
||||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>request</parameter></paramdef>
|
|
||||||
<paramdef>enum fe_sec_mini_cmd *<parameter>tone</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>fd</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>&fe_fd;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>request</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>FE_DISEQC_SEND_BURST</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>tone</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>pointer to &fe-sec-mini-cmd;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
|
|
||||||
<para>This ioctl is used to set the generation of a 22kHz tone burst for mini
|
|
||||||
DiSEqC satellite
|
|
||||||
selection for 2x1 switches.
|
|
||||||
This call requires read/write permissions.</para>
|
|
||||||
<para>It provides support for what's specified at
|
|
||||||
<ulink url="http://www.eutelsat.com/files/contributed/satellites/pdf/Diseqc/associated%20docs/simple_tone_burst_detec.pdf">Digital Satellite Equipment Control
|
|
||||||
(DiSEqC) - Simple "ToneBurst" Detection Circuit specification.</ulink>
|
|
||||||
</para>
|
|
||||||
&return-value-dvb;
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1 id="fe-sec-mini-cmd-t">
|
|
||||||
<title>enum fe_sec_mini_cmd</title>
|
|
||||||
|
|
||||||
<table pgwide="1" frame="none" id="fe-sec-mini-cmd">
|
|
||||||
<title>enum fe_sec_mini_cmd</title>
|
|
||||||
<tgroup cols="2">
|
|
||||||
&cs-def;
|
|
||||||
<thead>
|
|
||||||
<row>
|
|
||||||
<entry>ID</entry>
|
|
||||||
<entry>Description</entry>
|
|
||||||
</row>
|
|
||||||
</thead>
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry align="char" id="SEC-MINI-A"><constant>SEC_MINI_A</constant></entry>
|
|
||||||
<entry align="char">Sends a mini-DiSEqC 22kHz '0' Tone Burst to
|
|
||||||
select satellite-A</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry align="char" id="SEC-MINI-B"><constant>SEC_MINI_B</constant></entry>
|
|
||||||
<entry align="char">Sends a mini-DiSEqC 22kHz '1' Data Burst to
|
|
||||||
select satellite-B</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
</refentry>
|
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
<refentry id="FE_DISEQC_SEND_MASTER_CMD">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>ioctl FE_DISEQC_SEND_MASTER_CMD</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>FE_DISEQC_SEND_MASTER_CMD</refname>
|
|
||||||
<refpurpose>Sends a DiSEqC command</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>ioctl</function></funcdef>
|
|
||||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>request</parameter></paramdef>
|
|
||||||
<paramdef>struct dvb_diseqc_master_cmd *<parameter>argp</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>fd</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>&fe_fd;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>request</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>FE_DISEQC_SEND_MASTER_CMD</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>argp</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>pointer to &dvb-diseqc-master-cmd;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
|
|
||||||
<para>Sends a DiSEqC command to the antenna subsystem.</para>
|
|
||||||
&return-value-dvb;
|
|
||||||
|
|
||||||
<table pgwide="1" frame="none" id="dvb-diseqc-master-cmd">
|
|
||||||
<title>struct <structname>dvb_diseqc_master_cmd</structname></title>
|
|
||||||
<tgroup cols="3">
|
|
||||||
&cs-str;
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry>uint8_t</entry>
|
|
||||||
<entry>msg[6]</entry>
|
|
||||||
<entry>DiSEqC message (framing, address, command, data[3])</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry>uint8_t</entry>
|
|
||||||
<entry>msg_len</entry>
|
|
||||||
<entry>Length of the DiSEqC message. Valid values are 3 to 6</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
<refentry id="FE_ENABLE_HIGH_LNB_VOLTAGE">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>ioctl FE_ENABLE_HIGH_LNB_VOLTAGE</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>FE_ENABLE_HIGH_LNB_VOLTAGE</refname>
|
|
||||||
<refpurpose>Select output DC level between normal LNBf voltages or higher
|
|
||||||
LNBf voltages.</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>ioctl</function></funcdef>
|
|
||||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>request</parameter></paramdef>
|
|
||||||
<paramdef>unsigned int <parameter>high</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>fd</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>&fe_fd;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>request</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>FE_ENABLE_HIGH_LNB_VOLTAGE</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>high</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Valid flags:</para>
|
|
||||||
<itemizedlist>
|
|
||||||
<listitem><para>0 - normal 13V and 18V.</para></listitem>
|
|
||||||
<listitem><para>>0 - enables slightly higher voltages instead of
|
|
||||||
13/18V, in order to compensate for long antenna cables.</para></listitem>
|
|
||||||
</itemizedlist>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
|
|
||||||
<para>Select output DC level between normal LNBf voltages or higher
|
|
||||||
LNBf voltages between 0 (normal) or a value grater than 0 for higher
|
|
||||||
voltages.</para>
|
|
||||||
&return-value-dvb;
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
@@ -1,266 +0,0 @@
|
|||||||
<refentry id="FE_GET_INFO">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>ioctl FE_GET_INFO</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>FE_GET_INFO</refname>
|
|
||||||
<refpurpose>Query DVB frontend capabilities and returns information about
|
|
||||||
the front-end. This call only requires read-only access to the device</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>ioctl</function></funcdef>
|
|
||||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>request</parameter></paramdef>
|
|
||||||
<paramdef>struct dvb_frontend_info *<parameter>argp</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>fd</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>&fe_fd;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>request</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>FE_GET_INFO</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>argp</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>pointer to struct &dvb-frontend-info;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
|
|
||||||
<para>All DVB frontend devices support the
|
|
||||||
<constant>FE_GET_INFO</constant> ioctl. It is used to identify
|
|
||||||
kernel devices compatible with this specification and to obtain
|
|
||||||
information about driver and hardware capabilities. The ioctl takes a
|
|
||||||
pointer to dvb_frontend_info which is filled by the driver. When the
|
|
||||||
driver is not compatible with this specification the ioctl returns an error.
|
|
||||||
</para>
|
|
||||||
&return-value-dvb;
|
|
||||||
|
|
||||||
<table pgwide="1" frame="none" id="dvb-frontend-info">
|
|
||||||
<title>struct <structname>dvb_frontend_info</structname></title>
|
|
||||||
<tgroup cols="3">
|
|
||||||
&cs-str;
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry>char</entry>
|
|
||||||
<entry>name[128]</entry>
|
|
||||||
<entry>Name of the frontend</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry>fe_type_t</entry>
|
|
||||||
<entry>type</entry>
|
|
||||||
<entry><emphasis role="bold">DEPRECATED</emphasis>. DVBv3 type. Should not be used on modern programs, as a
|
|
||||||
frontend may have more than one type. So, the DVBv5 API should
|
|
||||||
be used instead to enumerate and select the frontend type.</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry>uint32_t</entry>
|
|
||||||
<entry>frequency_min</entry>
|
|
||||||
<entry>Minimal frequency supported by the frontend</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry>uint32_t</entry>
|
|
||||||
<entry>frequency_max</entry>
|
|
||||||
<entry>Maximal frequency supported by the frontend</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry>uint32_t</entry>
|
|
||||||
<entry>frequency_stepsize</entry>
|
|
||||||
<entry>Frequency step - all frequencies are multiple of this value</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry>uint32_t</entry>
|
|
||||||
<entry>frequency_tolerance</entry>
|
|
||||||
<entry>Tolerance of the frequency</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry>uint32_t</entry>
|
|
||||||
<entry>symbol_rate_min</entry>
|
|
||||||
<entry>Minimal symbol rate (for Cable/Satellite systems), in bauds</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry>uint32_t</entry>
|
|
||||||
<entry>symbol_rate_max</entry>
|
|
||||||
<entry>Maximal symbol rate (for Cable/Satellite systems), in bauds</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry>uint32_t</entry>
|
|
||||||
<entry>symbol_rate_tolerance</entry>
|
|
||||||
<entry>Maximal symbol rate tolerance, in ppm</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry>uint32_t</entry>
|
|
||||||
<entry>notifier_delay</entry>
|
|
||||||
<entry><emphasis role="bold">DEPRECATED</emphasis>. Not used by any driver.</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry>&fe-caps;</entry>
|
|
||||||
<entry>caps</entry>
|
|
||||||
<entry>Capabilities supported by the frontend</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<para>NOTE: The frequencies are specified in Hz for Terrestrial and Cable
|
|
||||||
systems. They're specified in kHz for Satellite systems</para>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1 id="fe-caps-t">
|
|
||||||
<title>frontend capabilities</title>
|
|
||||||
|
|
||||||
<para>Capabilities describe what a frontend can do. Some capabilities are
|
|
||||||
supported only on some specific frontend types.</para>
|
|
||||||
|
|
||||||
<table pgwide="1" frame="none" id="fe-caps">
|
|
||||||
<title>enum fe_caps</title>
|
|
||||||
<tgroup cols="2">
|
|
||||||
&cs-def;
|
|
||||||
<thead>
|
|
||||||
<row>
|
|
||||||
<entry>ID</entry>
|
|
||||||
<entry>Description</entry>
|
|
||||||
</row>
|
|
||||||
</thead>
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry id="FE-IS-STUPID"><constant>FE_IS_STUPID</constant></entry>
|
|
||||||
<entry>There's something wrong at the frontend, and it can't
|
|
||||||
report its capabilities</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-INVERSION-AUTO"><constant>FE_CAN_INVERSION_AUTO</constant></entry>
|
|
||||||
<entry>The frontend is capable of auto-detecting inversion</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-FEC-1-2"><constant>FE_CAN_FEC_1_2</constant></entry>
|
|
||||||
<entry>The frontend supports FEC 1/2</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-FEC-2-3"><constant>FE_CAN_FEC_2_3</constant></entry>
|
|
||||||
<entry>The frontend supports FEC 2/3</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-FEC-3-4"><constant>FE_CAN_FEC_3_4</constant></entry>
|
|
||||||
<entry>The frontend supports FEC 3/4</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-FEC-4-5"><constant>FE_CAN_FEC_4_5</constant></entry>
|
|
||||||
<entry>The frontend supports FEC 4/5</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-FEC-5-6"><constant>FE_CAN_FEC_5_6</constant></entry>
|
|
||||||
<entry>The frontend supports FEC 5/6</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-FEC-6-7"><constant>FE_CAN_FEC_6_7</constant></entry>
|
|
||||||
<entry>The frontend supports FEC 6/7</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-FEC-7-8"><constant>FE_CAN_FEC_7_8</constant></entry>
|
|
||||||
<entry>The frontend supports FEC 7/8</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-FEC-8-9"><constant>FE_CAN_FEC_8_9</constant></entry>
|
|
||||||
<entry>The frontend supports FEC 8/9</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-FEC-AUTO"><constant>FE_CAN_FEC_AUTO</constant></entry>
|
|
||||||
<entry>The frontend can autodetect FEC.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-QPSK"><constant>FE_CAN_QPSK</constant></entry>
|
|
||||||
<entry>The frontend supports QPSK modulation</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-QAM-16"><constant>FE_CAN_QAM_16</constant></entry>
|
|
||||||
<entry>The frontend supports 16-QAM modulation</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-QAM-32"><constant>FE_CAN_QAM_32</constant></entry>
|
|
||||||
<entry>The frontend supports 32-QAM modulation</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-QAM-64"><constant>FE_CAN_QAM_64</constant></entry>
|
|
||||||
<entry>The frontend supports 64-QAM modulation</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-QAM-128"><constant>FE_CAN_QAM_128</constant></entry>
|
|
||||||
<entry>The frontend supports 128-QAM modulation</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-QAM-256"><constant>FE_CAN_QAM_256</constant></entry>
|
|
||||||
<entry>The frontend supports 256-QAM modulation</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-QAM-AUTO"><constant>FE_CAN_QAM_AUTO</constant></entry>
|
|
||||||
<entry>The frontend can autodetect modulation</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-TRANSMISSION-MODE-AUTO"><constant>FE_CAN_TRANSMISSION_MODE_AUTO</constant></entry>
|
|
||||||
<entry>The frontend can autodetect the transmission mode</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-BANDWIDTH-AUTO"><constant>FE_CAN_BANDWIDTH_AUTO</constant></entry>
|
|
||||||
<entry>The frontend can autodetect the bandwidth</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-GUARD-INTERVAL-AUTO"><constant>FE_CAN_GUARD_INTERVAL_AUTO</constant></entry>
|
|
||||||
<entry>The frontend can autodetect the guard interval</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-HIERARCHY-AUTO"><constant>FE_CAN_HIERARCHY_AUTO</constant></entry>
|
|
||||||
<entry>The frontend can autodetect hierarch</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-8VSB"><constant>FE_CAN_8VSB</constant></entry>
|
|
||||||
<entry>The frontend supports 8-VSB modulation</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-16VSB"><constant>FE_CAN_16VSB</constant></entry>
|
|
||||||
<entry>The frontend supports 16-VSB modulation</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-HAS-EXTENDED-CAPS"><constant>FE_HAS_EXTENDED_CAPS</constant></entry>
|
|
||||||
<entry>Currently, unused</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-MULTISTREAM"><constant>FE_CAN_MULTISTREAM</constant></entry>
|
|
||||||
<entry>The frontend supports multistream filtering</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-TURBO-FEC"><constant>FE_CAN_TURBO_FEC</constant></entry>
|
|
||||||
<entry>The frontend supports turbo FEC modulation</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-2G-MODULATION"><constant>FE_CAN_2G_MODULATION</constant></entry>
|
|
||||||
<entry>The frontend supports "2nd generation modulation" (DVB-S2/T2)></entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-NEEDS-BENDING"><constant>FE_NEEDS_BENDING</constant></entry>
|
|
||||||
<entry>Not supported anymore, don't use it</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-RECOVER"><constant>FE_CAN_RECOVER</constant></entry>
|
|
||||||
<entry>The frontend can recover from a cable unplug automatically</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-CAN-MUTE-TS"><constant>FE_CAN_MUTE_TS</constant></entry>
|
|
||||||
<entry>The frontend can stop spurious TS data output</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
<refentry id="FE_GET_PROPERTY">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>ioctl FE_SET_PROPERTY, FE_GET_PROPERTY</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>FE_SET_PROPERTY</refname>
|
|
||||||
<refname>FE_GET_PROPERTY</refname>
|
|
||||||
<refpurpose>FE_SET_PROPERTY sets one or more frontend properties.
|
|
||||||
FE_GET_PROPERTY returns one or more frontend properties.</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>ioctl</function></funcdef>
|
|
||||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>request</parameter></paramdef>
|
|
||||||
<paramdef>struct dtv_properties *<parameter>argp</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>fd</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>&fe_fd;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>request</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>FE_SET_PROPERTY, FE_GET_PROPERTY</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>argp</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>pointer to &dtv-properties;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
|
|
||||||
<para>All DVB frontend devices support the
|
|
||||||
<constant>FE_SET_PROPERTY</constant> and <constant>FE_GET_PROPERTY</constant>
|
|
||||||
ioctls. The supported properties and statistics depends on the delivery system
|
|
||||||
and on the device:</para>
|
|
||||||
<itemizedlist>
|
|
||||||
<listitem>
|
|
||||||
<para><constant>FE_SET_PROPERTY:</constant></para>
|
|
||||||
<itemizedlist>
|
|
||||||
<listitem><para>This ioctl is used to set one or more
|
|
||||||
frontend properties.</para></listitem>
|
|
||||||
<listitem><para>This is the basic command to request the frontend to tune into some
|
|
||||||
frequency and to start decoding the digital TV signal.</para></listitem>
|
|
||||||
<listitem><para>This call requires read/write access to the device.</para></listitem>
|
|
||||||
<listitem><para>At return, the values are updated to reflect the
|
|
||||||
actual parameters used.</para></listitem>
|
|
||||||
</itemizedlist>
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
|
||||||
<para><constant>FE_GET_PROPERTY:</constant></para>
|
|
||||||
<itemizedlist>
|
|
||||||
<listitem><para>This ioctl is used to get properties and
|
|
||||||
statistics from the frontend.</para></listitem>
|
|
||||||
<listitem><para>No properties are changed, and statistics aren't reset.</para></listitem>
|
|
||||||
<listitem><para>This call only requires read-only access to the device.</para></listitem>
|
|
||||||
</itemizedlist>
|
|
||||||
</listitem>
|
|
||||||
</itemizedlist>
|
|
||||||
&return-value-dvb;
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
@@ -1,107 +0,0 @@
|
|||||||
<refentry id="FE_READ_STATUS">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>ioctl FE_READ_STATUS</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>FE_READ_STATUS</refname>
|
|
||||||
<refpurpose>Returns status information about the front-end. This call only
|
|
||||||
requires read-only access to the device</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>ioctl</function></funcdef>
|
|
||||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>request</parameter></paramdef>
|
|
||||||
<paramdef>unsigned int *<parameter>status</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>fd</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>&fe_fd;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>request</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>FE_READ_STATUS</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>status</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>pointer to a bitmask integer filled with the values defined by
|
|
||||||
&fe-status;.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
|
|
||||||
<para>All DVB frontend devices support the
|
|
||||||
<constant>FE_READ_STATUS</constant> ioctl. It is used to check about the
|
|
||||||
locking status of the frontend after being tuned. The ioctl takes a
|
|
||||||
pointer to an integer where the status will be written.
|
|
||||||
</para>
|
|
||||||
<para>NOTE: the size of status is actually sizeof(enum fe_status), with varies
|
|
||||||
according with the architecture. This needs to be fixed in the future.</para>
|
|
||||||
&return-value-dvb;
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1 id="fe-status-t">
|
|
||||||
<title>int fe_status</title>
|
|
||||||
|
|
||||||
<para>The fe_status parameter is used to indicate the current state
|
|
||||||
and/or state changes of the frontend hardware. It is produced using
|
|
||||||
the &fe-status; values on a bitmask</para>
|
|
||||||
|
|
||||||
<table pgwide="1" frame="none" id="fe-status">
|
|
||||||
<title>enum fe_status</title>
|
|
||||||
<tgroup cols="2">
|
|
||||||
&cs-def;
|
|
||||||
<thead>
|
|
||||||
<row>
|
|
||||||
<entry>ID</entry>
|
|
||||||
<entry>Description</entry>
|
|
||||||
</row>
|
|
||||||
</thead>
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry align="char" id="FE-HAS-SIGNAL"><constant>FE_HAS_SIGNAL</constant></entry>
|
|
||||||
<entry align="char">The frontend has found something above the noise level</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry align="char" id="FE-HAS-CARRIER"><constant>FE_HAS_CARRIER</constant></entry>
|
|
||||||
<entry align="char">The frontend has found a DVB signal</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry align="char" id="FE-HAS-VITERBI"><constant>FE_HAS_VITERBI</constant></entry>
|
|
||||||
<entry align="char">The frontend FEC inner coding (Viterbi, LDPC or other inner code) is stable</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry align="char" id="FE-HAS-SYNC"><constant>FE_HAS_SYNC</constant></entry>
|
|
||||||
<entry align="char">Synchronization bytes was found</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry align="char" id="FE-HAS-LOCK"><constant>FE_HAS_LOCK</constant></entry>
|
|
||||||
<entry align="char">The DVB were locked and everything is working</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry align="char" id="FE-TIMEDOUT"><constant>FE_TIMEDOUT</constant></entry>
|
|
||||||
<entry align="char">no lock within the last about 2 seconds</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry align="char" id="FE-REINIT"><constant>FE_REINIT</constant></entry>
|
|
||||||
<entry align="char">The frontend was reinitialized, application is
|
|
||||||
recommended to reset DiSEqC, tone and parameters</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
<refentry id="FE_SET_FRONTEND_TUNE_MODE">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>ioctl FE_SET_FRONTEND_TUNE_MODE</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>FE_SET_FRONTEND_TUNE_MODE</refname>
|
|
||||||
<refpurpose>Allow setting tuner mode flags to the frontend.</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>ioctl</function></funcdef>
|
|
||||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>request</parameter></paramdef>
|
|
||||||
<paramdef>unsigned int <parameter>flags</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>fd</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>&fe_fd;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>request</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>FE_SET_FRONTEND_TUNE_MODE</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>flags</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Valid flags:</para>
|
|
||||||
<itemizedlist>
|
|
||||||
<listitem><para>0 - normal tune mode</para></listitem>
|
|
||||||
<listitem><para>FE_TUNE_MODE_ONESHOT - When set, this flag will
|
|
||||||
disable any zigzagging or other "normal" tuning behaviour.
|
|
||||||
Additionally, there will be no automatic monitoring of the
|
|
||||||
lock status, and hence no frontend events will be
|
|
||||||
generated. If a frontend device is closed, this flag will
|
|
||||||
be automatically turned off when the device is reopened
|
|
||||||
read-write.</para></listitem>
|
|
||||||
</itemizedlist>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
|
|
||||||
<para>Allow setting tuner mode flags to the frontend, between 0 (normal)
|
|
||||||
or FE_TUNE_MODE_ONESHOT mode</para>
|
|
||||||
&return-value-dvb;
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
@@ -1,91 +0,0 @@
|
|||||||
<refentry id="FE_SET_TONE">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>ioctl FE_SET_TONE</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>FE_SET_TONE</refname>
|
|
||||||
<refpurpose>Sets/resets the generation of the continuous 22kHz tone.</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>ioctl</function></funcdef>
|
|
||||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>request</parameter></paramdef>
|
|
||||||
<paramdef>enum fe_sec_tone_mode *<parameter>tone</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>fd</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>&fe_fd;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>request</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>FE_SET_TONE</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>tone</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>pointer to &fe-sec-tone-mode;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
|
|
||||||
<para>This ioctl is used to set the generation of the continuous 22kHz tone.
|
|
||||||
This call requires read/write permissions.</para>
|
|
||||||
<para>Usually, satellite antenna subsystems require that the digital TV
|
|
||||||
device to send a 22kHz tone in order to select between high/low band on
|
|
||||||
some dual-band LNBf. It is also used to send signals to DiSEqC equipment,
|
|
||||||
but this is done using the DiSEqC ioctls.</para>
|
|
||||||
<para>NOTE: if more than one device is connected to the same antenna,
|
|
||||||
setting a tone may interfere on other devices, as they may lose
|
|
||||||
the capability of selecting the band. So, it is recommended that
|
|
||||||
applications would change to SEC_TONE_OFF when the device is not used.</para>
|
|
||||||
|
|
||||||
&return-value-dvb;
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1 id="fe-sec-tone-mode-t">
|
|
||||||
<title>enum fe_sec_tone_mode</title>
|
|
||||||
|
|
||||||
<table pgwide="1" frame="none" id="fe-sec-tone-mode">
|
|
||||||
<title>enum fe_sec_tone_mode</title>
|
|
||||||
<tgroup cols="2">
|
|
||||||
&cs-def;
|
|
||||||
<thead>
|
|
||||||
<row>
|
|
||||||
<entry>ID</entry>
|
|
||||||
<entry>Description</entry>
|
|
||||||
</row>
|
|
||||||
</thead>
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry align="char" id="SEC-TONE-ON"><constant>SEC_TONE_ON</constant></entry>
|
|
||||||
<entry align="char">Sends a 22kHz tone burst to the antenna</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry align="char" id="SEC-TONE-OFF"><constant>SEC_TONE_OFF</constant></entry>
|
|
||||||
<entry align="char">Don't send a 22kHz tone to the antenna
|
|
||||||
(except if the FE_DISEQC_* ioctls are called)</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
</refentry>
|
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
<refentry id="FE_SET_VOLTAGE">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>ioctl FE_SET_VOLTAGE</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>FE_SET_VOLTAGE</refname>
|
|
||||||
<refpurpose>Allow setting the DC level sent to the antenna subsystem.</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>ioctl</function></funcdef>
|
|
||||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>request</parameter></paramdef>
|
|
||||||
<paramdef>enum fe_sec_voltage *<parameter>voltage</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>fd</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>&fe_fd;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>request</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>FE_SET_VOLTAGE</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>voltage</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>pointer to &fe-sec-voltage;</para>
|
|
||||||
<para>Valid values are described at &fe-sec-voltage;.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
|
|
||||||
<para>This ioctl allows to set the DC voltage level sent through the antenna
|
|
||||||
cable to 13V, 18V or off.</para>
|
|
||||||
<para>Usually, a satellite antenna subsystems require that the digital TV
|
|
||||||
device to send a DC voltage to feed power to the LNBf. Depending on the
|
|
||||||
LNBf type, the polarization or the intermediate frequency (IF) of the LNBf
|
|
||||||
can controlled by the voltage level. Other devices (for example, the ones
|
|
||||||
that implement DISEqC and multipoint LNBf's don't need to control the
|
|
||||||
voltage level, provided that either 13V or 18V is sent to power up the
|
|
||||||
LNBf.</para>
|
|
||||||
<para>NOTE: if more than one device is connected to the same antenna,
|
|
||||||
setting a voltage level may interfere on other devices, as they may lose
|
|
||||||
the capability of setting polarization or IF. So, on those
|
|
||||||
cases, setting the voltage to SEC_VOLTAGE_OFF while the device is not is
|
|
||||||
used is recommended.</para>
|
|
||||||
|
|
||||||
&return-value-dvb;
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
</refentry>
|
|
||||||
@@ -1,269 +0,0 @@
|
|||||||
<title>DVB Frontend API</title>
|
|
||||||
|
|
||||||
<para>The DVB frontend API was designed to support three types of delivery systems:</para>
|
|
||||||
<itemizedlist>
|
|
||||||
<listitem><para>Terrestrial systems: DVB-T, DVB-T2, ATSC, ATSC M/H, ISDB-T, DVB-H, DTMB, CMMB</para></listitem>
|
|
||||||
<listitem><para>Cable systems: DVB-C Annex A/C, ClearQAM (DVB-C Annex B), ISDB-C</para></listitem>
|
|
||||||
<listitem><para>Satellite systems: DVB-S, DVB-S2, DVB Turbo, ISDB-S, DSS</para></listitem>
|
|
||||||
</itemizedlist>
|
|
||||||
<para>The DVB frontend controls several sub-devices including:</para>
|
|
||||||
<itemizedlist>
|
|
||||||
<listitem><para>Tuner</para></listitem>
|
|
||||||
<listitem><para>Digital TV demodulator</para></listitem>
|
|
||||||
<listitem><para>Low noise amplifier (LNA)</para></listitem>
|
|
||||||
<listitem><para>Satellite Equipment Control (SEC) hardware (only for Satellite).</para></listitem>
|
|
||||||
</itemizedlist>
|
|
||||||
<para>The frontend can be accessed through
|
|
||||||
<constant>/dev/dvb/adapter?/frontend?</constant>. Data types and
|
|
||||||
ioctl definitions can be accessed by including
|
|
||||||
<constant>linux/dvb/frontend.h</constant> in your application.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>NOTE: Transmission via the internet (DVB-IP)
|
|
||||||
is not yet handled by this API but a future extension is possible.</para>
|
|
||||||
<para>On Satellite systems, the API support for the Satellite Equipment Control
|
|
||||||
(SEC) allows to power control and to send/receive signals to control the
|
|
||||||
antenna subsystem, selecting the polarization and choosing the Intermediate
|
|
||||||
Frequency IF) of the Low Noise Block Converter Feed Horn (LNBf). It
|
|
||||||
supports the DiSEqC and V-SEC protocols. The DiSEqC (digital SEC)
|
|
||||||
specification is available at
|
|
||||||
<ulink url="http://www.eutelsat.com/satellites/4_5_5.html">Eutelsat</ulink>.</para>
|
|
||||||
|
|
||||||
<section id="query-dvb-frontend-info">
|
|
||||||
<title>Querying frontend information</title>
|
|
||||||
|
|
||||||
<para>Usually, the first thing to do when the frontend is opened is to
|
|
||||||
check the frontend capabilities. This is done using <link linkend="FE_GET_INFO">FE_GET_INFO</link>. This ioctl will enumerate
|
|
||||||
the DVB API version and other characteristics about the frontend, and
|
|
||||||
can be opened either in read only or read/write mode.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="dvb-fe-read-status">
|
|
||||||
<title>Querying frontend status and statistics</title>
|
|
||||||
|
|
||||||
<para>Once <link linkend="FE_GET_PROPERTY"><constant>FE_SET_PROPERTY</constant></link>
|
|
||||||
is called, the frontend will run a kernel thread that will periodically
|
|
||||||
check for the tuner lock status and provide statistics about the quality
|
|
||||||
of the signal.</para>
|
|
||||||
<para>The information about the frontend tuner locking status can be queried
|
|
||||||
using <link linkend="FE_READ_STATUS">FE_READ_STATUS</link>.</para>
|
|
||||||
<para>Signal statistics are provided via <link linkend="FE_GET_PROPERTY"><constant>FE_GET_PROPERTY</constant></link>.
|
|
||||||
Please note that several statistics require the demodulator to be fully
|
|
||||||
locked (e. g. with FE_HAS_LOCK bit set). See
|
|
||||||
<link linkend="frontend-stat-properties">Frontend statistics indicators</link>
|
|
||||||
for more details.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
&sub-dvbproperty;
|
|
||||||
|
|
||||||
<section id="frontend_fcalls">
|
|
||||||
<title>Frontend Function Calls</title>
|
|
||||||
|
|
||||||
<refentry id="frontend_f_open">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>DVB frontend open()</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>fe-open</refname>
|
|
||||||
<refpurpose>Open a frontend device</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcsynopsisinfo>#include <fcntl.h></funcsynopsisinfo>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>open</function></funcdef>
|
|
||||||
<paramdef>const char *<parameter>device_name</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>flags</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>device_name</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Device to be opened.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>flags</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Open flags. Access can either be
|
|
||||||
<constant>O_RDWR</constant> or <constant>O_RDONLY</constant>.</para>
|
|
||||||
<para>Multiple opens are allowed with <constant>O_RDONLY</constant>. In this mode, only query and read ioctls are allowed.</para>
|
|
||||||
<para>Only one open is allowed in <constant>O_RDWR</constant>. In this mode, all ioctls are allowed.</para>
|
|
||||||
<para>When the <constant>O_NONBLOCK</constant> flag is given, the system calls may return &EAGAIN; when no data is available or when the device driver is temporarily busy.</para>
|
|
||||||
<para>Other flags have no effect.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
<para>This system call opens a named frontend device (<constant>/dev/dvb/adapter?/frontend?</constant>)
|
|
||||||
for subsequent use. Usually the first thing to do after a successful open is to
|
|
||||||
find out the frontend type with <link linkend="FE_GET_INFO">FE_GET_INFO</link>.</para>
|
|
||||||
<para>The device can be opened in read-only mode, which only allows monitoring of
|
|
||||||
device status and statistics, or read/write mode, which allows any kind of use
|
|
||||||
(e.g. performing tuning operations.)
|
|
||||||
</para>
|
|
||||||
<para>In a system with multiple front-ends, it is usually the case that multiple devices
|
|
||||||
cannot be open in read/write mode simultaneously. As long as a front-end
|
|
||||||
device is opened in read/write mode, other open() calls in read/write mode will
|
|
||||||
either fail or block, depending on whether non-blocking or blocking mode was
|
|
||||||
specified. A front-end device opened in blocking mode can later be put into
|
|
||||||
non-blocking mode (and vice versa) using the F_SETFL command of the fcntl
|
|
||||||
system call. This is a standard system call, documented in the Linux manual
|
|
||||||
page for fcntl. When an open() call has succeeded, the device will be ready
|
|
||||||
for use in the specified mode. This implies that the corresponding hardware is
|
|
||||||
powered up, and that other front-ends may have been powered down to make
|
|
||||||
that possible.</para>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Return Value</title>
|
|
||||||
|
|
||||||
<para>On success <function>open</function> returns the new file
|
|
||||||
descriptor. On error -1 is returned, and the <varname>errno</varname>
|
|
||||||
variable is set appropriately. Possible error codes are:</para>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EACCES</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The caller has no permission to access the
|
|
||||||
device.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EBUSY</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The the device driver is already in use.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>ENXIO</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>No device corresponding to this device special file
|
|
||||||
exists.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>ENOMEM</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Not enough kernel memory was available to complete the
|
|
||||||
request.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EMFILE</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The process already has the maximum number of
|
|
||||||
files open.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>ENFILE</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The limit on the total number of files open on the
|
|
||||||
system has been reached.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>ENODEV</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The device got removed.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
|
|
||||||
<refentry id="frontend_f_close">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>DVB frontend close()</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>fe-close</refname>
|
|
||||||
<refpurpose>Close a frontend device</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcsynopsisinfo>#include <unistd.h></funcsynopsisinfo>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>close</function></funcdef>
|
|
||||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>fd</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>&fd;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
<para>This system call closes a previously opened front-end device. After closing
|
|
||||||
a front-end device, its corresponding hardware might be powered down
|
|
||||||
automatically.</para>
|
|
||||||
</refsect1>
|
|
||||||
<refsect1>
|
|
||||||
<title>Return Value</title>
|
|
||||||
|
|
||||||
<para>The function returns <returnvalue>0</returnvalue> on
|
|
||||||
success, <returnvalue>-1</returnvalue> on failure and the
|
|
||||||
<varname>errno</varname> is set appropriately. Possible error
|
|
||||||
codes:</para>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EBADF</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para><parameter>fd</parameter> is not a valid open file
|
|
||||||
descriptor.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
|
|
||||||
&sub-fe-get-info;
|
|
||||||
&sub-fe-read-status;
|
|
||||||
&sub-fe-get-property;
|
|
||||||
&sub-fe-diseqc-reset-overload;
|
|
||||||
&sub-fe-diseqc-send-master-cmd;
|
|
||||||
&sub-fe-diseqc-recv-slave-reply;
|
|
||||||
&sub-fe-diseqc-send-burst;
|
|
||||||
&sub-fe-set-tone;
|
|
||||||
&sub-fe-set-voltage;
|
|
||||||
&sub-fe-enable-high-lnb-voltage;
|
|
||||||
&sub-fe-set-frontend-tune-mode;
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="frontend_legacy_dvbv3_api">
|
|
||||||
<title>DVB Frontend legacy API (a. k. a. DVBv3)</title>
|
|
||||||
<para>The usage of this API is deprecated, as it doesn't support all digital
|
|
||||||
TV standards, doesn't provide good statistics measurements and provides
|
|
||||||
incomplete information. This is kept only to support legacy applications.</para>
|
|
||||||
|
|
||||||
&sub-frontend_legacy_api;
|
|
||||||
</section>
|
|
||||||
@@ -1,654 +0,0 @@
|
|||||||
<section id="frontend_legacy_types">
|
|
||||||
<title>Frontend Legacy Data Types</title>
|
|
||||||
|
|
||||||
<section id="fe-type-t">
|
|
||||||
<title>Frontend type</title>
|
|
||||||
|
|
||||||
<para>For historical reasons, frontend types are named by the type of modulation
|
|
||||||
used in transmission. The fontend types are given by fe_type_t type, defined as:</para>
|
|
||||||
|
|
||||||
<table pgwide="1" frame="none" id="fe-type">
|
|
||||||
<title>Frontend types</title>
|
|
||||||
<tgroup cols="3">
|
|
||||||
&cs-def;
|
|
||||||
<thead>
|
|
||||||
<row>
|
|
||||||
<entry>fe_type</entry>
|
|
||||||
<entry>Description</entry>
|
|
||||||
<entry><link linkend="DTV-DELIVERY-SYSTEM">DTV_DELIVERY_SYSTEM</link> equivalent type</entry>
|
|
||||||
</row>
|
|
||||||
</thead>
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry id="FE-QPSK"><constant>FE_QPSK</constant></entry>
|
|
||||||
<entry>For DVB-S standard</entry>
|
|
||||||
<entry><constant>SYS_DVBS</constant></entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-QAM"><constant>FE_QAM</constant></entry>
|
|
||||||
<entry>For DVB-C annex A standard</entry>
|
|
||||||
<entry><constant>SYS_DVBC_ANNEX_A</constant></entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-OFDM"><constant>FE_OFDM</constant></entry>
|
|
||||||
<entry>For DVB-T standard</entry>
|
|
||||||
<entry><constant>SYS_DVBT</constant></entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry id="FE-ATSC"><constant>FE_ATSC</constant></entry>
|
|
||||||
<entry>For ATSC standard (terrestrial) or for DVB-C Annex B (cable) used in US.</entry>
|
|
||||||
<entry><constant>SYS_ATSC</constant> (terrestrial) or <constant>SYS_DVBC_ANNEX_B</constant> (cable)</entry>
|
|
||||||
</row>
|
|
||||||
</tbody></tgroup></table>
|
|
||||||
|
|
||||||
<para>Newer formats like DVB-S2, ISDB-T, ISDB-S and DVB-T2 are not described at the above, as they're
|
|
||||||
supported via the new <link linkend="FE_GET_PROPERTY">FE_GET_PROPERTY/FE_GET_SET_PROPERTY</link> ioctl's, using the <link linkend="DTV-DELIVERY-SYSTEM">DTV_DELIVERY_SYSTEM</link> parameter.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>In the old days, &dvb-frontend-info; used to contain
|
|
||||||
<constant>fe_type_t</constant> field to indicate the delivery systems,
|
|
||||||
filled with either FE_QPSK, FE_QAM, FE_OFDM or FE_ATSC. While this is
|
|
||||||
still filled to keep backward compatibility, the usage of this
|
|
||||||
field is deprecated, as it can report just one delivery system, but some
|
|
||||||
devices support multiple delivery systems. Please use
|
|
||||||
<link linkend="DTV-ENUM-DELSYS">DTV_ENUM_DELSYS</link> instead.
|
|
||||||
</para>
|
|
||||||
<para>On devices that support multiple delivery systems,
|
|
||||||
&dvb-frontend-info;::<constant>fe_type_t</constant> is filled with the
|
|
||||||
currently standard, as selected by the last call to
|
|
||||||
<link linkend="FE_GET_PROPERTY">FE_SET_PROPERTY</link>
|
|
||||||
using the &DTV-DELIVERY-SYSTEM; property.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="fe-bandwidth-t">
|
|
||||||
<title>Frontend bandwidth</title>
|
|
||||||
|
|
||||||
<table pgwide="1" frame="none" id="fe-bandwidth">
|
|
||||||
<title>enum fe_bandwidth</title>
|
|
||||||
<tgroup cols="2">
|
|
||||||
&cs-def;
|
|
||||||
<thead>
|
|
||||||
<row>
|
|
||||||
<entry>ID</entry>
|
|
||||||
<entry>Description</entry>
|
|
||||||
</row>
|
|
||||||
</thead>
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry id="BANDWIDTH-AUTO"><constant>BANDWIDTH_AUTO</constant></entry>
|
|
||||||
<entry>Autodetect bandwidth (if supported)</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry id="BANDWIDTH-1-712-MHZ"><constant>BANDWIDTH_1_712_MHZ</constant></entry>
|
|
||||||
<entry>1.712 MHz</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry id="BANDWIDTH-5-MHZ"><constant>BANDWIDTH_5_MHZ</constant></entry>
|
|
||||||
<entry>5 MHz</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry id="BANDWIDTH-6-MHZ"><constant>BANDWIDTH_6_MHZ</constant></entry>
|
|
||||||
<entry>6 MHz</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry id="BANDWIDTH-7-MHZ"><constant>BANDWIDTH_7_MHZ</constant></entry>
|
|
||||||
<entry>7 MHz</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry id="BANDWIDTH-8-MHZ"><constant>BANDWIDTH_8_MHZ</constant></entry>
|
|
||||||
<entry>8 MHz</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry id="BANDWIDTH-10-MHZ"><constant>BANDWIDTH_10_MHZ</constant></entry>
|
|
||||||
<entry>10 MHz</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="dvb-frontend-parameters">
|
|
||||||
<title>frontend parameters</title>
|
|
||||||
<para>The kind of parameters passed to the frontend device for tuning depend on
|
|
||||||
the kind of hardware you are using.</para>
|
|
||||||
<para>The struct <constant>dvb_frontend_parameters</constant> uses an
|
|
||||||
union with specific per-system parameters. However, as newer delivery systems
|
|
||||||
required more data, the structure size weren't enough to fit, and just
|
|
||||||
extending its size would break the existing applications. So, those parameters
|
|
||||||
were replaced by the usage of <link linkend="FE_GET_PROPERTY">
|
|
||||||
<constant>FE_GET_PROPERTY/FE_SET_PROPERTY</constant></link> ioctl's. The
|
|
||||||
new API is flexible enough to add new parameters to existing delivery systems,
|
|
||||||
and to add newer delivery systems.</para>
|
|
||||||
<para>So, newer applications should use <link linkend="FE_GET_PROPERTY">
|
|
||||||
<constant>FE_GET_PROPERTY/FE_SET_PROPERTY</constant></link> instead, in
|
|
||||||
order to be able to support the newer System Delivery like DVB-S2, DVB-T2,
|
|
||||||
DVB-C2, ISDB, etc.</para>
|
|
||||||
<para>All kinds of parameters are combined as an union in the FrontendParameters structure:
|
|
||||||
<programlisting>
|
|
||||||
struct dvb_frontend_parameters {
|
|
||||||
uint32_t frequency; /⋆ (absolute) frequency in Hz for QAM/OFDM ⋆/
|
|
||||||
/⋆ intermediate frequency in kHz for QPSK ⋆/
|
|
||||||
&fe-spectral-inversion-t; inversion;
|
|
||||||
union {
|
|
||||||
struct dvb_qpsk_parameters qpsk;
|
|
||||||
struct dvb_qam_parameters qam;
|
|
||||||
struct dvb_ofdm_parameters ofdm;
|
|
||||||
struct dvb_vsb_parameters vsb;
|
|
||||||
} u;
|
|
||||||
};
|
|
||||||
</programlisting></para>
|
|
||||||
<para>In the case of QPSK frontends the <constant>frequency</constant> field specifies the intermediate
|
|
||||||
frequency, i.e. the offset which is effectively added to the local oscillator frequency (LOF) of
|
|
||||||
the LNB. The intermediate frequency has to be specified in units of kHz. For QAM and
|
|
||||||
OFDM frontends the <constant>frequency</constant> specifies the absolute frequency and is given in Hz.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<section id="dvb-qpsk-parameters">
|
|
||||||
<title>QPSK parameters</title>
|
|
||||||
<para>For satellite QPSK frontends you have to use the <constant>dvb_qpsk_parameters</constant> structure:</para>
|
|
||||||
<programlisting>
|
|
||||||
struct dvb_qpsk_parameters {
|
|
||||||
uint32_t symbol_rate; /⋆ symbol rate in Symbols per second ⋆/
|
|
||||||
&fe-code-rate-t; fec_inner; /⋆ forward error correction (see above) ⋆/
|
|
||||||
};
|
|
||||||
</programlisting>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="dvb-qam-parameters">
|
|
||||||
<title>QAM parameters</title>
|
|
||||||
<para>for cable QAM frontend you use the <constant>dvb_qam_parameters</constant> structure:</para>
|
|
||||||
<programlisting>
|
|
||||||
struct dvb_qam_parameters {
|
|
||||||
uint32_t symbol_rate; /⋆ symbol rate in Symbols per second ⋆/
|
|
||||||
&fe-code-rate-t; fec_inner; /⋆ forward error correction (see above) ⋆/
|
|
||||||
&fe-modulation-t; modulation; /⋆ modulation type (see above) ⋆/
|
|
||||||
};
|
|
||||||
</programlisting>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="dvb-vsb-parameters">
|
|
||||||
<title>VSB parameters</title>
|
|
||||||
<para>ATSC frontends are supported by the <constant>dvb_vsb_parameters</constant> structure:</para>
|
|
||||||
<programlisting>
|
|
||||||
struct dvb_vsb_parameters {
|
|
||||||
&fe-modulation-t; modulation; /⋆ modulation type (see above) ⋆/
|
|
||||||
};
|
|
||||||
</programlisting>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="dvb-ofdm-parameters">
|
|
||||||
<title>OFDM parameters</title>
|
|
||||||
<para>DVB-T frontends are supported by the <constant>dvb_ofdm_parameters</constant> structure:</para>
|
|
||||||
<programlisting>
|
|
||||||
struct dvb_ofdm_parameters {
|
|
||||||
&fe-bandwidth-t; bandwidth;
|
|
||||||
&fe-code-rate-t; code_rate_HP; /⋆ high priority stream code rate ⋆/
|
|
||||||
&fe-code-rate-t; code_rate_LP; /⋆ low priority stream code rate ⋆/
|
|
||||||
&fe-modulation-t; constellation; /⋆ modulation type (see above) ⋆/
|
|
||||||
&fe-transmit-mode-t; transmission_mode;
|
|
||||||
&fe-guard-interval-t; guard_interval;
|
|
||||||
&fe-hierarchy-t; hierarchy_information;
|
|
||||||
};
|
|
||||||
</programlisting>
|
|
||||||
</section>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="dvb-frontend-event">
|
|
||||||
<title>frontend events</title>
|
|
||||||
<programlisting>
|
|
||||||
struct dvb_frontend_event {
|
|
||||||
fe_status_t status;
|
|
||||||
struct dvb_frontend_parameters parameters;
|
|
||||||
};
|
|
||||||
</programlisting>
|
|
||||||
</section>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="frontend_legacy_fcalls">
|
|
||||||
<title>Frontend Legacy Function Calls</title>
|
|
||||||
|
|
||||||
<para>Those functions are defined at DVB version 3. The support is kept in
|
|
||||||
the kernel due to compatibility issues only. Their usage is strongly
|
|
||||||
not recommended</para>
|
|
||||||
|
|
||||||
<section id="FE_READ_BER">
|
|
||||||
<title>FE_READ_BER</title>
|
|
||||||
<para>DESCRIPTION
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>This ioctl call returns the bit error rate for the signal currently
|
|
||||||
received/demodulated by the front-end. For this command, read-only access to
|
|
||||||
the device is sufficient.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>SYNOPSIS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int ioctl(int fd, int request = <link linkend="FE_READ_BER">FE_READ_BER</link>,
|
|
||||||
uint32_t ⋆ber);</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>PARAMETERS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int fd</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>File descriptor returned by a previous call to open().</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int request</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Equals <link linkend="FE_READ_BER">FE_READ_BER</link> for this command.</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>uint32_t *ber</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>The bit error rate is stored into *ber.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
|
|
||||||
&return-value-dvb;
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="FE_READ_SNR">
|
|
||||||
<title>FE_READ_SNR</title>
|
|
||||||
|
|
||||||
<para>DESCRIPTION
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>This ioctl call returns the signal-to-noise ratio for the signal currently received
|
|
||||||
by the front-end. For this command, read-only access to the device is sufficient.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>SYNOPSIS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int ioctl(int fd, int request = <link linkend="FE_READ_SNR">FE_READ_SNR</link>, uint16_t
|
|
||||||
⋆snr);</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>PARAMETERS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int fd</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>File descriptor returned by a previous call to open().</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int request</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Equals <link linkend="FE_READ_SNR">FE_READ_SNR</link> for this command.</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>uint16_t *snr</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>The signal-to-noise ratio is stored into *snr.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
|
|
||||||
&return-value-dvb;
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="FE_READ_SIGNAL_STRENGTH">
|
|
||||||
<title>FE_READ_SIGNAL_STRENGTH</title>
|
|
||||||
<para>DESCRIPTION
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>This ioctl call returns the signal strength value for the signal currently received
|
|
||||||
by the front-end. For this command, read-only access to the device is sufficient.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>SYNOPSIS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int ioctl( int fd, int request =
|
|
||||||
<link linkend="FE_READ_SIGNAL_STRENGTH">FE_READ_SIGNAL_STRENGTH</link>, uint16_t ⋆strength);</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
|
|
||||||
<para>PARAMETERS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int fd</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>File descriptor returned by a previous call to open().</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int request</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Equals <link linkend="FE_READ_SIGNAL_STRENGTH">FE_READ_SIGNAL_STRENGTH</link> for this
|
|
||||||
command.</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>uint16_t *strength</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>The signal strength value is stored into *strength.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
|
|
||||||
&return-value-dvb;
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="FE_READ_UNCORRECTED_BLOCKS">
|
|
||||||
<title>FE_READ_UNCORRECTED_BLOCKS</title>
|
|
||||||
<para>DESCRIPTION
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>This ioctl call returns the number of uncorrected blocks detected by the device
|
|
||||||
driver during its lifetime. For meaningful measurements, the increment in block
|
|
||||||
count during a specific time interval should be calculated. For this command,
|
|
||||||
read-only access to the device is sufficient.</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>Note that the counter will wrap to zero after its maximum count has been
|
|
||||||
reached.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>SYNOPSIS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int ioctl( int fd, int request =
|
|
||||||
<link linkend="FE_READ_UNCORRECTED_BLOCKS">FE_READ_UNCORRECTED_BLOCKS</link>, uint32_t ⋆ublocks);</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>PARAMETERS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int fd</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>File descriptor returned by a previous call to open().</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int request</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Equals <link linkend="FE_READ_UNCORRECTED_BLOCKS">FE_READ_UNCORRECTED_BLOCKS</link> for this
|
|
||||||
command.</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>uint32_t *ublocks</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>The total number of uncorrected blocks seen by the driver
|
|
||||||
so far.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
|
|
||||||
&return-value-dvb;
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="FE_SET_FRONTEND">
|
|
||||||
<title>FE_SET_FRONTEND</title>
|
|
||||||
<para>DESCRIPTION
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>This ioctl call starts a tuning operation using specified parameters. The result
|
|
||||||
of this call will be successful if the parameters were valid and the tuning could
|
|
||||||
be initiated. The result of the tuning operation in itself, however, will arrive
|
|
||||||
asynchronously as an event (see documentation for <link linkend="FE_GET_EVENT">FE_GET_EVENT</link> and
|
|
||||||
FrontendEvent.) If a new <link linkend="FE_SET_FRONTEND">FE_SET_FRONTEND</link> operation is initiated before
|
|
||||||
the previous one was completed, the previous operation will be aborted in favor
|
|
||||||
of the new one. This command requires read/write access to the device.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
|
|
||||||
<para>SYNOPSIS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int ioctl(int fd, int request = <link linkend="FE_SET_FRONTEND">FE_SET_FRONTEND</link>,
|
|
||||||
struct dvb_frontend_parameters ⋆p);</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
<para>PARAMETERS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int fd</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>File descriptor returned by a previous call to open().</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int request</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Equals <link linkend="FE_SET_FRONTEND">FE_SET_FRONTEND</link> for this command.</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>struct
|
|
||||||
dvb_frontend_parameters
|
|
||||||
*p</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Points to parameters for tuning operation.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
|
|
||||||
&return-value-dvb;
|
|
||||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>EINVAL</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Maximum supported symbol rate reached.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="FE_GET_FRONTEND">
|
|
||||||
<title>FE_GET_FRONTEND</title>
|
|
||||||
<para>DESCRIPTION
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>This ioctl call queries the currently effective frontend parameters. For this
|
|
||||||
command, read-only access to the device is sufficient.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
|
|
||||||
<para>SYNOPSIS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int ioctl(int fd, int request = <link linkend="FE_GET_FRONTEND">FE_GET_FRONTEND</link>,
|
|
||||||
struct dvb_frontend_parameters ⋆p);</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
|
|
||||||
<para>PARAMETERS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int fd</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>File descriptor returned by a previous call to open().</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int request</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Equals <link linkend="FE_SET_FRONTEND">FE_SET_FRONTEND</link> for this command.</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>struct
|
|
||||||
dvb_frontend_parameters
|
|
||||||
*p</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Points to parameters for tuning operation.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
|
|
||||||
&return-value-dvb;
|
|
||||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>EINVAL</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Maximum supported symbol rate reached.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="FE_GET_EVENT">
|
|
||||||
<title>FE_GET_EVENT</title>
|
|
||||||
<para>DESCRIPTION
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>This ioctl call returns a frontend event if available. If an event is not
|
|
||||||
available, the behavior depends on whether the device is in blocking or
|
|
||||||
non-blocking mode. In the latter case, the call fails immediately with errno
|
|
||||||
set to EWOULDBLOCK. In the former case, the call blocks until an event
|
|
||||||
becomes available.</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>The standard Linux poll() and/or select() system calls can be used with the
|
|
||||||
device file descriptor to watch for new events. For select(), the file descriptor
|
|
||||||
should be included in the exceptfds argument, and for poll(), POLLPRI should
|
|
||||||
be specified as the wake-up condition. Since the event queue allocated is
|
|
||||||
rather small (room for 8 events), the queue must be serviced regularly to avoid
|
|
||||||
overflow. If an overflow happens, the oldest event is discarded from the queue,
|
|
||||||
and an error (EOVERFLOW) occurs the next time the queue is read. After
|
|
||||||
reporting the error condition in this fashion, subsequent
|
|
||||||
<link linkend="FE_GET_EVENT">FE_GET_EVENT</link>
|
|
||||||
calls will return events from the queue as usual.</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>For the sake of implementation simplicity, this command requires read/write
|
|
||||||
access to the device.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
|
|
||||||
<para>SYNOPSIS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int ioctl(int fd, int request = QPSK_GET_EVENT,
|
|
||||||
struct dvb_frontend_event ⋆ev);</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
|
|
||||||
<para>PARAMETERS
|
|
||||||
</para>
|
|
||||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int fd</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>File descriptor returned by a previous call to open().</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>int request</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Equals <link linkend="FE_GET_EVENT">FE_GET_EVENT</link> for this command.</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>struct
|
|
||||||
dvb_frontend_event
|
|
||||||
*ev</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Points to the location where the event,</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>if any, is to be stored.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
|
|
||||||
&return-value-dvb;
|
|
||||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>EWOULDBLOCK</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>There is no event pending, and the device is in
|
|
||||||
non-blocking mode.</para>
|
|
||||||
</entry>
|
|
||||||
</row><row><entry
|
|
||||||
align="char">
|
|
||||||
<para>EOVERFLOW</para>
|
|
||||||
</entry><entry
|
|
||||||
align="char">
|
|
||||||
<para>Overflow in event queue - one or more events were lost.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="FE_DISHNETWORK_SEND_LEGACY_CMD">
|
|
||||||
<title>FE_DISHNETWORK_SEND_LEGACY_CMD</title>
|
|
||||||
<para>DESCRIPTION</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row>
|
|
||||||
<entry align="char">
|
|
||||||
<para>WARNING: This is a very obscure legacy command, used only at stv0299 driver. Should not be used on newer drivers.</para>
|
|
||||||
<para>It provides a non-standard method for selecting Diseqc voltage on the frontend, for Dish Network legacy switches.</para>
|
|
||||||
<para>As support for this ioctl were added in 2004, this means that such dishes were already legacy in 2004.</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
|
|
||||||
<para>SYNOPSIS</para>
|
|
||||||
<informaltable><tgroup cols="1"><tbody><row>
|
|
||||||
<entry align="char">
|
|
||||||
<para>int ioctl(int fd, int request =
|
|
||||||
<link linkend="FE_DISHNETWORK_SEND_LEGACY_CMD">FE_DISHNETWORK_SEND_LEGACY_CMD</link>, unsigned long cmd);</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
|
|
||||||
<para>PARAMETERS</para>
|
|
||||||
<informaltable><tgroup cols="2"><tbody><row>
|
|
||||||
<entry align="char">
|
|
||||||
<para>unsigned long cmd</para>
|
|
||||||
</entry>
|
|
||||||
<entry align="char">
|
|
||||||
<para>
|
|
||||||
sends the specified raw cmd to the dish via DISEqC.
|
|
||||||
</para>
|
|
||||||
</entry>
|
|
||||||
</row></tbody></tgroup></informaltable>
|
|
||||||
|
|
||||||
&return-value-dvb;
|
|
||||||
</section>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
@@ -1,211 +0,0 @@
|
|||||||
<title>Introduction</title>
|
|
||||||
|
|
||||||
<section id="requisites">
|
|
||||||
<title>What you need to know</title>
|
|
||||||
|
|
||||||
<para>The reader of this document is required to have some knowledge in
|
|
||||||
the area of digital video broadcasting (DVB) and should be familiar with
|
|
||||||
part I of the MPEG2 specification ISO/IEC 13818 (aka ITU-T H.222), i.e
|
|
||||||
you should know what a program/transport stream (PS/TS) is and what is
|
|
||||||
meant by a packetized elementary stream (PES) or an I-frame.</para>
|
|
||||||
|
|
||||||
<para>Various DVB standards documents are available from
|
|
||||||
<ulink url="http://www.dvb.org" /> and/or
|
|
||||||
<ulink url="http://www.etsi.org" />.</para>
|
|
||||||
|
|
||||||
<para>It is also necessary to know how to access unix/linux devices and
|
|
||||||
how to use ioctl calls. This also includes the knowledge of C or C++.
|
|
||||||
</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="history">
|
|
||||||
<title>History</title>
|
|
||||||
|
|
||||||
<para>The first API for DVB cards we used at Convergence in late 1999
|
|
||||||
was an extension of the Video4Linux API which was primarily developed
|
|
||||||
for frame grabber cards. As such it was not really well suited to be
|
|
||||||
used for DVB cards and their new features like recording MPEG streams
|
|
||||||
and filtering several section and PES data streams at the same time.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>In early 2000, we were approached by Nokia with a proposal for a
|
|
||||||
new standard Linux DVB API. As a commitment to the development of
|
|
||||||
terminals based on open standards, Nokia and Convergence made it
|
|
||||||
available to all Linux developers and published it on
|
|
||||||
<ulink url="https://linuxtv.org" /> in September 2000.
|
|
||||||
Convergence is the maintainer of the Linux DVB API. Together with the
|
|
||||||
LinuxTV community (i.e. you, the reader of this document), the Linux DVB
|
|
||||||
API will be constantly reviewed and improved. With the Linux driver for
|
|
||||||
the Siemens/Hauppauge DVB PCI card Convergence provides a first
|
|
||||||
implementation of the Linux DVB API.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="overview">
|
|
||||||
<title>Overview</title>
|
|
||||||
|
|
||||||
<figure id="stb_components">
|
|
||||||
<title>Components of a DVB card/STB</title>
|
|
||||||
<mediaobject>
|
|
||||||
<imageobject>
|
|
||||||
<imagedata fileref="dvbstb.pdf" format="PS" />
|
|
||||||
</imageobject>
|
|
||||||
<imageobject>
|
|
||||||
<imagedata fileref="dvbstb.png" format="PNG" />
|
|
||||||
</imageobject>
|
|
||||||
</mediaobject>
|
|
||||||
</figure>
|
|
||||||
|
|
||||||
<para>A DVB PCI card or DVB set-top-box (STB) usually consists of the
|
|
||||||
following main hardware components: </para>
|
|
||||||
|
|
||||||
<itemizedlist>
|
|
||||||
<listitem>
|
|
||||||
|
|
||||||
<para>Frontend consisting of tuner and DVB demodulator</para>
|
|
||||||
|
|
||||||
<para>Here the raw signal reaches the DVB hardware from a satellite dish
|
|
||||||
or antenna or directly from cable. The frontend down-converts and
|
|
||||||
demodulates this signal into an MPEG transport stream (TS). In case of a
|
|
||||||
satellite frontend, this includes a facility for satellite equipment
|
|
||||||
control (SEC), which allows control of LNB polarization, multi feed
|
|
||||||
switches or dish rotors.</para>
|
|
||||||
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
|
||||||
|
|
||||||
<para>Conditional Access (CA) hardware like CI adapters and smartcard slots
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>The complete TS is passed through the CA hardware. Programs to
|
|
||||||
which the user has access (controlled by the smart card) are decoded in
|
|
||||||
real time and re-inserted into the TS.</para>
|
|
||||||
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
|
||||||
<para>Demultiplexer which filters the incoming DVB stream</para>
|
|
||||||
|
|
||||||
<para>The demultiplexer splits the TS into its components like audio and
|
|
||||||
video streams. Besides usually several of such audio and video streams
|
|
||||||
it also contains data streams with information about the programs
|
|
||||||
offered in this or other streams of the same provider.</para>
|
|
||||||
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
|
||||||
|
|
||||||
<para>MPEG2 audio and video decoder</para>
|
|
||||||
|
|
||||||
<para>The main targets of the demultiplexer are the MPEG2 audio and
|
|
||||||
video decoders. After decoding they pass on the uncompressed audio and
|
|
||||||
video to the computer screen or (through a PAL/NTSC encoder) to a TV
|
|
||||||
set.</para>
|
|
||||||
|
|
||||||
|
|
||||||
</listitem>
|
|
||||||
</itemizedlist>
|
|
||||||
|
|
||||||
<para><xref linkend="stb_components" /> shows a crude schematic of the control and data flow
|
|
||||||
between those components.</para>
|
|
||||||
|
|
||||||
<para>On a DVB PCI card not all of these have to be present since some
|
|
||||||
functionality can be provided by the main CPU of the PC (e.g. MPEG
|
|
||||||
picture and sound decoding) or is not needed (e.g. for data-only uses
|
|
||||||
like “internet over satellite”). Also not every card or STB
|
|
||||||
provides conditional access hardware.</para>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="dvb_devices">
|
|
||||||
<title>Linux DVB Devices</title>
|
|
||||||
|
|
||||||
<para>The Linux DVB API lets you control these hardware components
|
|
||||||
through currently six Unix-style character devices for video, audio,
|
|
||||||
frontend, demux, CA and IP-over-DVB networking. The video and audio
|
|
||||||
devices control the MPEG2 decoder hardware, the frontend device the
|
|
||||||
tuner and the DVB demodulator. The demux device gives you control over
|
|
||||||
the PES and section filters of the hardware. If the hardware does not
|
|
||||||
support filtering these filters can be implemented in software. Finally,
|
|
||||||
the CA device controls all the conditional access capabilities of the
|
|
||||||
hardware. It can depend on the individual security requirements of the
|
|
||||||
platform, if and how many of the CA functions are made available to the
|
|
||||||
application through this device.</para>
|
|
||||||
|
|
||||||
<para>All devices can be found in the <constant>/dev</constant>
|
|
||||||
tree under <constant>/dev/dvb</constant>. The individual devices
|
|
||||||
are called:</para>
|
|
||||||
|
|
||||||
<itemizedlist>
|
|
||||||
<listitem>
|
|
||||||
|
|
||||||
<para><constant>/dev/dvb/adapterN/audioM</constant>,</para>
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
|
||||||
<para><constant>/dev/dvb/adapterN/videoM</constant>,</para>
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
|
||||||
<para><constant>/dev/dvb/adapterN/frontendM</constant>,</para>
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
|
||||||
|
|
||||||
<para><constant>/dev/dvb/adapterN/netM</constant>,</para>
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
|
||||||
|
|
||||||
<para><constant>/dev/dvb/adapterN/demuxM</constant>,</para>
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
|
||||||
|
|
||||||
<para><constant>/dev/dvb/adapterN/dvrM</constant>,</para>
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
|
||||||
|
|
||||||
<para><constant>/dev/dvb/adapterN/caM</constant>,</para></listitem></itemizedlist>
|
|
||||||
|
|
||||||
<para>where N enumerates the DVB PCI cards in a system starting
|
|
||||||
from 0, and M enumerates the devices of each type within each
|
|
||||||
adapter, starting from 0, too. We will omit the “
|
|
||||||
<constant>/dev/dvb/adapterN/</constant>” in the further discussion
|
|
||||||
of these devices.</para>
|
|
||||||
|
|
||||||
<para>More details about the data structures and function calls of all
|
|
||||||
the devices are described in the following chapters.</para>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="include_files">
|
|
||||||
<title>API include files</title>
|
|
||||||
|
|
||||||
<para>For each of the DVB devices a corresponding include file exists.
|
|
||||||
The DVB API include files should be included in application sources with
|
|
||||||
a partial path like:</para>
|
|
||||||
|
|
||||||
<programlisting>
|
|
||||||
#include <linux/dvb/audio.h>
|
|
||||||
</programlisting>
|
|
||||||
<programlisting>
|
|
||||||
#include <linux/dvb/ca.h>
|
|
||||||
</programlisting>
|
|
||||||
<programlisting>
|
|
||||||
#include <linux/dvb/dmx.h>
|
|
||||||
</programlisting>
|
|
||||||
<programlisting>
|
|
||||||
#include <linux/dvb/frontend.h>
|
|
||||||
</programlisting>
|
|
||||||
<programlisting>
|
|
||||||
#include <linux/dvb/net.h>
|
|
||||||
</programlisting>
|
|
||||||
<programlisting>
|
|
||||||
#include <linux/dvb/osd.h>
|
|
||||||
</programlisting>
|
|
||||||
<programlisting>
|
|
||||||
#include <linux/dvb/video.h>
|
|
||||||
</programlisting>
|
|
||||||
|
|
||||||
<para>To enable applications to support different API version, an
|
|
||||||
additional include file
|
|
||||||
<constant>linux/dvb/version.h</constant> exists, which defines the
|
|
||||||
constant <constant>DVB_API_VERSION</constant>. This document
|
|
||||||
describes <constant>DVB_API_VERSION 5.10</constant>.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
@@ -1,238 +0,0 @@
|
|||||||
<title>DVB Network API</title>
|
|
||||||
<para>The DVB net device controls the mapping of data packages that are
|
|
||||||
part of a transport stream to be mapped into a virtual network interface,
|
|
||||||
visible through the standard Linux network protocol stack.</para>
|
|
||||||
<para>Currently, two encapsulations are supported:</para>
|
|
||||||
<itemizedlist>
|
|
||||||
<listitem><para><ulink url="http://en.wikipedia.org/wiki/Multiprotocol_Encapsulation">
|
|
||||||
Multi Protocol Encapsulation (MPE)</ulink></para></listitem>
|
|
||||||
<listitem><para><ulink url="http://en.wikipedia.org/wiki/Unidirectional_Lightweight_Encapsulation">
|
|
||||||
Ultra Lightweight Encapsulation (ULE)</ulink></para></listitem>
|
|
||||||
</itemizedlist>
|
|
||||||
|
|
||||||
<para>In order to create the Linux virtual network interfaces, an application
|
|
||||||
needs to tell to the Kernel what are the PIDs and the encapsulation types
|
|
||||||
that are present on the transport stream. This is done through
|
|
||||||
<constant>/dev/dvb/adapter?/net?</constant> device node.
|
|
||||||
The data will be available via virtual <constant>dvb?_?</constant>
|
|
||||||
network interfaces, and will be controlled/routed via the standard
|
|
||||||
ip tools (like ip, route, netstat, ifconfig, etc).</para>
|
|
||||||
<para> Data types and and ioctl definitions are defined via
|
|
||||||
<constant>linux/dvb/net.h</constant> header.</para>
|
|
||||||
|
|
||||||
<section id="net_fcalls">
|
|
||||||
<title>DVB net Function Calls</title>
|
|
||||||
|
|
||||||
|
|
||||||
<refentry id="NET_ADD_IF">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>ioctl NET_ADD_IF</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>NET_ADD_IF</refname>
|
|
||||||
<refpurpose>Creates a new network interface for a given Packet ID.</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>ioctl</function></funcdef>
|
|
||||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>request</parameter></paramdef>
|
|
||||||
<paramdef>struct dvb_net_if *<parameter>net_if</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>fd</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>&fe_fd;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>request</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>FE_SET_TONE</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>net_if</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>pointer to &dvb-net-if;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
|
|
||||||
<para>The NET_ADD_IF ioctl system call selects the Packet ID (PID) that
|
|
||||||
contains a TCP/IP traffic, the type of encapsulation to be used (MPE or ULE)
|
|
||||||
and the interface number for the new interface to be created. When the
|
|
||||||
system call successfully returns, a new virtual network interface is created.</para>
|
|
||||||
<para>The &dvb-net-if;::ifnum field will be filled with the number of the
|
|
||||||
created interface.</para>
|
|
||||||
|
|
||||||
&return-value-dvb;
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1 id="dvb-net-if-t">
|
|
||||||
<title>struct <structname>dvb_net_if</structname> description</title>
|
|
||||||
|
|
||||||
<table pgwide="1" frame="none" id="dvb-net-if">
|
|
||||||
<title>struct <structname>dvb_net_if</structname></title>
|
|
||||||
<tgroup cols="2">
|
|
||||||
&cs-def;
|
|
||||||
<thead>
|
|
||||||
<row>
|
|
||||||
<entry>ID</entry>
|
|
||||||
<entry>Description</entry>
|
|
||||||
</row>
|
|
||||||
</thead>
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry align="char">pid</entry>
|
|
||||||
<entry align="char">Packet ID (PID) of the MPEG-TS that contains
|
|
||||||
data</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry align="char">ifnum</entry>
|
|
||||||
<entry align="char">number of the DVB interface.</entry>
|
|
||||||
</row><row>
|
|
||||||
<entry align="char">feedtype</entry>
|
|
||||||
<entry align="char">Encapsulation type of the feed. It can be:
|
|
||||||
<constant>DVB_NET_FEEDTYPE_MPE</constant> for MPE encoding
|
|
||||||
or
|
|
||||||
<constant>DVB_NET_FEEDTYPE_ULE</constant> for ULE encoding.
|
|
||||||
</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
|
|
||||||
<refentry id="NET_REMOVE_IF">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>ioctl NET_REMOVE_IF</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>NET_REMOVE_IF</refname>
|
|
||||||
<refpurpose>Removes a network interface.</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>ioctl</function></funcdef>
|
|
||||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>request</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>ifnum</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>fd</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>&fe_fd;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>request</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>FE_SET_TONE</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>net_if</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>number of the interface to be removed</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
|
|
||||||
<para>The NET_REMOVE_IF ioctl deletes an interface previously created
|
|
||||||
via &NET-ADD-IF;.</para>
|
|
||||||
|
|
||||||
&return-value-dvb;
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
|
|
||||||
|
|
||||||
<refentry id="NET_GET_IF">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>ioctl NET_GET_IF</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>NET_GET_IF</refname>
|
|
||||||
<refpurpose>Read the configuration data of an interface created via
|
|
||||||
&NET-ADD-IF;.</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>ioctl</function></funcdef>
|
|
||||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>request</parameter></paramdef>
|
|
||||||
<paramdef>struct dvb_net_if *<parameter>net_if</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>fd</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>&fe_fd;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>request</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>FE_SET_TONE</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>net_if</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>pointer to &dvb-net-if;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
|
|
||||||
<para>The NET_GET_IF ioctl uses the interface number given by the
|
|
||||||
&dvb-net-if;::ifnum field and fills the content of &dvb-net-if; with
|
|
||||||
the packet ID and encapsulation type used on such interface. If the
|
|
||||||
interface was not created yet with &NET-ADD-IF;, it will return -1 and
|
|
||||||
fill the <constant>errno</constant> with <constant>EINVAL</constant>
|
|
||||||
error code.</para>
|
|
||||||
|
|
||||||
&return-value-dvb;
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
</section>
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,398 +0,0 @@
|
|||||||
iVBORw0KGgoAAAANSUhEUgAAAzMAAAGaCAYAAAA7Jx25AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBI
|
|
||||||
WXMAAA3XAAANiQFmEOuiAAAgAElEQVR42uzdd1RU18I28GdgKFZUBE0saFA0KoqFFkEhKhbAQmxJ
|
|
||||||
bIkNNEpMEUwsMZarJMZrw4KxRExQczUqil0jRBA1GAjGQqLYC4TemdnfH76cj3HodYDntxaLmTll
|
|
||||||
zuw57Zmz9z4yIYQAkYZzcnJCSkoKGjZsyMIgIiIiquPS09PRoEEDyBhmqCaQyWRo06YN3nvvPRYG
|
|
||||||
ERERUR137Ngx/Pnnn5CzKKgmMDAwwKpVqxhmiIiIiAj29vZ4//33ocWiICIiIiKimohhhoiIiIiI
|
|
||||||
GGaIiIiIiIgYZoiIiIiIiBhmiIiIiIiIYYaIiIiIiIhhhoiIiIiIiGGGiIiIiIgYZoiIiIiIiBhm
|
|
||||||
iIiIiIiIGGaIiIiIiIgYZoiIiIiIiGGGiIiIiIiIYYaIiIiIiIhhhoiIiIiIGGaIiIiIiIgYZoiI
|
|
||||||
iIiIiBhmiIiIiIiIYYaIiIiIiIhhhoiIiIiIqFLIWQRElSMsLAy2trZo1KgR5HJualTxEhIS8P33
|
|
||||||
3+PDDz+sM5+5bdu2ePDgAZo2bcoVgCplm3J0dMS5c+fqzGf++uuvsWTJEm5TVClSU1ORk5ODBw8e
|
|
||||||
oHXr1gwzRDVJbm4uAGDRokUwMDBggVCFmzlzJrKysurUZ3727BksLCzg4eHBFYAq3IIFC5CQkFCn
|
|
||||||
PnNGRgYAYNWqVVwBqMJFRUVh48aNUCqVlfYeDDNElWzGjBkMM1QpNm7cWOc+c8uWLTFjxgzMmDGD
|
|
||||||
KwBVuLt37yIkJKTOfW5nZ2duU1SpYaYysc0MERERERHVSAwzRERERETEMENERERERMQwQ0RERERE
|
|
||||||
xDBDREREREQMM0RERERERAwzREREREREDDNERERERMQwQ0RERERExDBDRERERETEMENERERERMQw
|
|
||||||
Q0REREREDDNEREREREQMM0RERERERAwzRERERETEMENERERERMQwQ0RERERExDBDREREREQMM0RE
|
|
||||||
RERERAwzREREREREDDNEREREREQMM0RERERExDBDRERERETEMENERERERMQwQ0REREREDDNERERE
|
|
||||||
REQMM0RERERERAwzRERERETEMENERERERMQwQ0REREREVGnkLAKimunBgwdISkoq8/SGhoZ47bXX
|
|
||||||
WJCV6NmzZwgMDMS5c+ewd+9eFgiVSVZWFkJCQnD16lU8evQICoUChoaG6NChA2xsbNCxY0fIZDI8
|
|
||||||
efIEp06dwuTJk0s876CgIJiYmKBLly4saKq2Y5Wuri6aNm0KQ0NDaGnxd3ZimCGqE/78808EBgbi
|
|
||||||
p59+QkJCgsowLS0tyGQy6blSqYQQQmWcjz/+GGvXrmVBVoKtW7di+/btuHbtGoQQMDQ0ZKFQqf37
|
|
||||||
77/w8fHBtm3bkJCQgCZNmsDS0hLGxsZ48OABtm/fjidPnsDU1BR2dnYICwtDz549SxxmlEol5s6d
|
|
||||||
CxsbG+zZs4cFTpV2rDpx4gQOHDiAJ0+eqAzT09ODUqlETk4OAEBfXx/dunWDvb093Nzc0LdvX5Vj
|
|
||||||
GVFBGH+JaqihQ4di06ZNOHr0qMrrly5dgkKhQG5urvSnVCqRlZWF27dvY8mSJQCA7OxsFmIlmTFj
|
|
||||||
Bs6ePctfu6nMTp48iTfffBOrV6+Gnp4e9uzZg+fPn+PUqVPw9/fHkSNH8PDhQxw9ehRCCOzevRu3
|
|
||||||
bt1CWlpaqd4jJiYG+/btw+PHj1noVGnHqnXr1uHcuXMqr+/fvx8ZGRnIzs5GSkoKIiIi8M0330BH
|
|
||||||
Rwdr166Fvb09evXqhdOnT7MQiWGGqDazsrJSeV5Y1TFdXV107NgRX331FSZPniz9ElbTnDp1SuOX
|
|
||||||
USaToXHjxujevTtXUCq1H3/8EcOGDcPz58/RtWtXREREYMKECdDR0VE9gGtpwcXFBdeuXYONjQ0A
|
|
||||||
ID09vcTvs2HDBgBATk4OfH19WfBUqTp16gS5/P9XCDI3N5euujRs2BAWFhb46KOP8Ntvv+HIkSNo
|
|
||||||
3rw5rl+/DicnJ3z66adQKpUsRGKYIaqNdHR0Sl3HeNy4cTXyysyBAwdq1EkX635TaV29ehVTpkyB
|
|
||||||
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
|
|
||||||
jmeffTYGDRp0zu/34IMPxne+850zHlXJy8uLurq6yM3NjS9+8Ytx0003xdixY6N///52FmIGAIAz
|
|
||||||
q6+vj5dffjmef/75+Nvf/habNm2K/fv3RyqViuzs7KitrT3lNllZWZGXlxe///3vY+zYsWfc9s9+
|
|
||||||
9rOYN29es0By9AXEDABAm/nPf/4TL7zwQmzZsiU2bdoUr776atTX10fnzp2jtra22VGWX/3qV3HX
|
|
||||||
XXedso377rsvFi5cGBHvnua5sbHR0RcQMwAAF1ZdXV288sorsXXr1ti8eXOUlpbGgQMHmr7+pS99
|
|
||||||
KdavXx9ZWe+ek2natGnx61//OiIi+vfvH1/5ylccfQExAwBcKPv27Ys//vGPFuIMDh8+HP/617/i
|
|
||||||
6aefjoaGhujbt2/ccccdsX79+vj3v/8dH/rQh2L06NHRrVs3i3UWI0eOjE996lMWQsyIGQCg9ZSW
|
|
||||||
lsZ1110XvXr1ii5duliQczj5N2mysrKaTqfM2e3evTuWL18e06ZNsxgdXMoSAABt4fXXX4+ioiIL
|
|
||||||
QasbPHiwRSAi/NFMAABAzAAAAIgZAAAAMQMAAIgZAAAAMQMAACBmAAAAMQMAACBmAAAAxAwAAICY
|
|
||||||
AQAAxAwAAICYAQAAEDMAAICYAQAAEDMAAABiBgAAEDMAAABiBgAAQMwAAACIGQAAQMwAAACIGQAA
|
|
||||||
ADEDAACIGQAAADEDAAAgZgAAADEDAAAgZgAAAMQMAACAmAEAANqBlCUAADh/VVVVsXfv3vP7wSyV
|
|
||||||
ik9+8pOxf//+OHjw4BmvV1xcHB/5yEdO+XySJPHaa6+d9jYDBgyILl262FGIGQAAmvvLX/4St9xy
|
|
||||||
y3lto2fPnrF///7YvXt3rFy5Mh5++OFIkqTp6yUlJTFx4sQYNWrUGWPmz3/+c2zZsiWefPLJiIgo
|
|
||||||
KiqK6dOnx4wZM8QMYgYAgFPV1NRERETv3r1jwYIF8dnPfjYuu+yySKVSUVpaGpMmTYqIiI997GPx
|
|
||||||
3HPPRZIkcfz48XjrrbfiySefjGXLljVtY8SIETFixIi44oorYt68eU3f44c//GFMnDjxjPchKysr
|
|
||||||
7rnnnrjnnnti4MCBsWPHjnj88cdjzJgxdhBiBgCA06uuro6cnJz461//GiUlJc2+1qNHj6aPc3Jy
|
|
||||||
ok+fPk2XL7/88hg9enRceumlsXjx4ma3mz17djz00EOxc+fOiIgoLS09a8yclCRJVFRUxMiRI4UM
|
|
||||||
7ZoTAAAAtIKampoYP378KSHTUjNmzIjGxsZoaGho+lwqlYqFCxc2XX7kkUfi2LFj59zWCy+8EAcO
|
|
||||||
HIgZM2bYMYgZAADOHTPjxo37wLe/7LLLYtiwYXH8+PFmn7/llluiX79+ERFx5MiR+O1vf3vOba1e
|
|
||||||
vTq6d+8eEyZMsGMQMwAAnN28efNiypQp57WNLVu2REFBQbPPpVKpmDVrVtPln//8582O3vyvo0eP
|
|
||||||
xqOPPhpTpkyJvLw8OwYxAwDAOX6oysqKTp06ndc2srOzT7uNb37zm1FUVBQREW+88UbTmcpO59FH
|
|
||||||
H41jx47Ft771LTsFMQMAwMVVWFgYU6dObbp8//33n/Z6SZLEihUrYtSoUR94dgfEDAAArWrmzJmR
|
|
||||||
Sr17ItotW7bE888/f8p1XnrppXjllVeahQ+IGQAALqo+ffrEbbfd1nT5dEdnVqxYEcXFxfHVr37V
|
|
||||||
giFmAABIH3PmzGn6+Iknnog9e/Y0Xa6qqorHHnssJk+eHJ07d7ZYiBkAANLH0KFD4/rrr4+IiMbG
|
|
||||||
xnjggQeavmbwHzEDAEBamzt3btPHK1eujKqqqqbB/xEjRsSnP/1pi4SYAQAg/dxwww1NZyo7evRo
|
|
||||||
rFq1KrZt2xZlZWUG/xEzAACk8Q9vWVnNZmeWLVsWDz74YFxyySVx6623WiDEDAAA6Wvy5MnRvXv3
|
|
||||||
iIjYu3dvrFmzJu64447o0qWLxUHMAADQehobG1t1e/n5+TF9+vRmnzP4j5gBAKDVvfPOO00f19TU
|
|
||||||
tMo2p0+fHnl5eRERMWzYsPjMZz5joREzAAC0rmeeeabp471798aOHTvOe5u9evWKyZMnR0QY/EfM
|
|
||||||
AADQeg4dOhRTpkyJIUOGxIoVK5p97eqrr44bb7wxfvKTn5zX95gzZ04UFhbGxIkTLTgdUsoSAAC0
|
|
||||||
vm7dusWaNWva9HtcccUVsWnTpigsLLTgdEiOzAAAZLChQ4daBMQMAACAmAEAABAzAAAAYgYAABAz
|
|
||||||
AAAAYgYAAEDMAAAAYgYAAEDMAAAAiBkAAEDMAAAAiBkAAAAxAwAAIGYAAAAxAwAAIGYAAADEDAAA
|
|
||||||
IGYAAADEDAAAgJgBAADEjCUAAADEDAAAgJgBAAAQMwAAgJgBAAAQMwAAAGIGAAAQMwAAAGIGAABA
|
|
||||||
zAAAAIgZAABAzAAAAIgZAAAAMQMAAIgZAACA9JCyBABAW+jVq1cUFBRYCFpdZWWlRSAiIjolSZJY
|
|
||||||
BgCgtVRUVMTGjRstBG1q6NCh8fGPf9xCiBkxAwAAZB4zMwAAQEZKvb79xaYLJYOutiIAAEBGcGQG
|
|
||||||
AADISP8FpxZnWS0U37cAAAAASUVORK5CYII=
|
|
||||||
@@ -1,447 +0,0 @@
|
|||||||
R0lGODlhcwKfAucAAAAAAElJDK+vr0gSElYMDC8kDV5bEBcHOwYGSEQODmEaGgoKOBkTVC0tVyAg
|
|
||||||
aDcJC6Ojoys8DAAYGqSkxV9fFFtdEJmZmUA4EF0wMAAAcAoTHTZHJ0gYGAcMTwcSO29ISFUHB2AV
|
|
||||||
FXd3YAcHMRUVQiIAGg4HT3t7eywOJ3d3dwcHSEEgABMuDnd3OGpkSQAAYlZGBzEEBGJlDCstCxwc
|
|
||||||
WQcHSzkRGWBtYC0AACA3ABAKNhAQTTMwDA0VQD4AAEYVFVVVVSQMJQULOB8fQScnYBgYRD5VPmZm
|
|
||||||
DEZRB2ZiDAoKSgAAVAwQOH5+lBwcS+7u7hoaST4+X3d3WACPADMzMyBRIDgAAGBgc0JCEHEAAEwN
|
|
||||||
DRkwDAoKOR8kPZR7eyA1IABpABgNQBA9EABVAAsLRww/DAwMPgBNAENDCgc9B8zMzAUFQQBDAD4M
|
|
||||||
DAwOKgAAcQA5AEtLFYqKAA0NTC8HBxEREQgfCAArAAApACIqMkkGBhoqKnwAAAsGQ6qqqkoKCg4O
|
|
||||||
MlkcHAoZJCcrW6SkpFQAAAAAOBAOSwAVGh0ROgMPHWZmB00QEGUAAFQaGjEyC2w4OLe3n4qKioiI
|
|
||||||
iBAVMC4uXhkZUGIAAHJYWHd3AAAAPhAQUQUGL0BAIGggIBgAGkIVFV9fEAwcJR8KJA8MU9EAAAcH
|
|
||||||
VRoaYWhoaDcAALu7AGZmZnAAAGRkZGQVFVhqWD4KCgwOUzMzDAAAmgklBzEHBzExClhYWBMTPAYJ
|
|
||||||
Qy8fCFpaB///////ACISRExUDUQrDAwMVhISSEYYGHd3IDhcOERERElJAAkPNTsHF1hYckgGBj05
|
|
||||||
CFYAADg4OCAVO0hCDDAwMLu7ilpaDR8qCDg+EBxGHN3d3REGNjo9CDQ8DBwYRGZmHFMAABQ+FBE+
|
|
||||||
ESIiIhs+BxU0FWVeBw04DYqKsxAsEB8hQAwuDAc2BwwqDAoqCgcIL1dMDQAA0Q0iDQwiDAckBxAQ
|
|
||||||
EDwAAAAAU0JCDAkJPru7u5oAADg4bAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAALwALAAAAABzAp8C
|
|
||||||
AAj+AHkJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuX
|
|
||||||
MGPKnEmzps2bOHPq3Mkz5z0AQIMCSNHyZ0WjE5GqNAZAqcGmT+8VZMoL6k6rEp0KfEJl489VBcEB
|
|
||||||
GGjBwk8LBJsyFQqU15MUdQDUWfVk4JNVccER5ZXCT8+/gAN/xFp0LEWtDxEfRKo44s8n1/YeJCyQ
|
|
||||||
8GO+1xhSbvwxRWaklBEiXoVW4886BNW0FQjkyem6laUKdLqKSuZrQIxtpbLqc51JbsHBFkw8pYUT
|
|
||||||
w4uHDK2SM0PnCqHPNiz9uWGFoS1fb7h5u0nQshf+ar2G2isAKn4FpqByHQivn8YkY3WK9RoANXx1
|
|
||||||
kwUncBVw5QCSdAsA8jiDXIAeEQYXAMbgp0YKKQAFYVxEPbjgXm/FBURmD1pQxz1qsDfUdAVlCMCG
|
|
||||||
vFg4lhpMgbOKYX6IBY5fHX642FBx0cULbnKlUFdQkgS1IxA91mWMBWJRYQF7dZQ2HVBIsdhjbG4R
|
|
||||||
WUeE4f3UFlQN6hUiUK1puV1Q93Sp24LglNYlAGmmKGJrvBxJ4YWxiUkmLzGymZ6ULnqXAlgC5Tmj
|
|
||||||
QRE2qd+NkwDKCziTwAjcT6rhV1WW28013D11UfHfVrItieCnHw0YVIEHgnoRVutllgJ/X+F54hP+
|
|
||||||
fjT1FWR68WXbXV3dU4cxmBoDnGpSaZUqru/NJRUVrV3DXrHBAnCNrrwmN9Cs17jIC2+QUUEUY4Zh
|
|
||||||
qyxR52X2IlFwFWSUUU/8tmObXBrzxBNEhveeYVCd5wd5RD1Ra3eVzajGPeCoSq8x4qJ2ZXDghvlq
|
|
||||||
rFJBBR6z82aGbLbe+TqbjT9lNtCq4npHUMblqQEOUr3Nmx+VJJIVl7aSToqQan/ZydbMNNds8804
|
|
||||||
56zzzjzXbGpFWA0q0IdKWSWrswIhyUuTAtn3L9IE2ddsQUzveF/GKUJtwVirSAZECliLpnUdqmns
|
|
||||||
ockml500agCkx625YxnlqUCT6NaU2lbL+zD+AKXNpTHK09Lr5MaCk+h3WrIZ3fDULnc90Nd4b12Q
|
|
||||||
VY6zJtmiTnoc+LV+QYiUfuiyS6lB96wHAKDMAa5TZBC27vrrsMcu++y012777bjDHg3N4Dgj7c8P
|
|
||||||
YTXzPUUnTvx1Rgl/PFlUgBMv2gMp/zaJawUFtuabT6fUudTFjfxYVk2/uVERCmX38tHrTe/iTa8C
|
|
||||||
Th1A4MevyykCsStV9Bt1jfvwy288lQ5bX5zYcr3spU8g1ZMQ4gbCH7HxIlGLetp7/sOYOjxhPthz
|
|
||||||
FX40VRDPqA54IISIqAhkoN+F0CFBkxf0FBe2s1XNaVG6D5W08sKrGcY+ZuPa5aB3I7OBI3L+qHkb
|
|
||||||
EPPXPbiZzAKHSh8Om6YdAKowQ/TLnlUOhrbwbQeKinNiFaVSuYEskReSI4iNeNFFg1StKgnRH9lY
|
|
||||||
NZYUSEopX8NgWpIDlVURJFawSd0J92iQW5DKhHzkTnhS9UALFq9Op6MVuW5VG7RF6oFt46GtrkEs
|
|
||||||
pRgjWcvSVbCIhrwdUqtW3tLWvOqClFCCSzbiIxG61PUtlxnDXfBqosusAgQ42TGSHwPAj2TDSqbs
|
|
||||||
kkS1rMst/zdLxjkMYza6JMWmshdNQqx0fAkYGanjyW6J0iiHUkq65DiQV2aGWMFB0T1EmbVAmjMh
|
|
||||||
lDwnRRS0MvwcclI/WZCOTAQnpSwoPgD+mIRW6EnK6zyBKYZKmozQYk/vqIiKPEKoWNRAHtQkdC9W
|
|
||||||
TNn4DPMlKkIllldyYy61mKK1UAE/AI3aQq2CJDbBhW2oXJFH/YeyekmlodeSYUnb5BaAIrEgk3CP
|
|
||||||
QNlUmgi55UVNMoxPNwpJd95HMk5p1Ojsghe5lGwrTa1V0nSqzqpadSXVmckOr7rHdAEyNbDRVU+A
|
|
||||||
MDiumvWsHclqTO6xKbSeMAVlPcgqWgMvReWkWm7Nq14tota9+vUjb2FILF/FE7P89bCITaxiF8vY
|
|
||||||
xjr2sZCNrGQnS9nKWvaymM2sZjfL2c569rOgDa1oR1uSfxHvtKhNrWpXy9rWuva1sI3+7WkBaVrZ
|
|
||||||
2va2uM0tbNOo29769re7FQ1wh0vc3/K2uMhNbnAN4hrlOve5p21ZQvIxi+pa97rYza52t8vd7nr3
|
|
||||||
u+CtbgZUOBBP4OO86E2vetfL3va6973wja98z1uIhHBDFfjNr373y9/++ve/AA6wgAeMX24kxBpg
|
|
||||||
SLCCF8zgBjv4wRCOsIQnTOEEWyMhSwivhjfM4Q6DlwaiYcV8R0ziEptYvp5gSD7cweIWu/jFMI6x
|
|
||||||
jGdM4xrb+MYsngV5BeKJUvj4x0AOspCHTOQiG/nISE6yjy+REGL04slQjrKUp0zlKlv5yljOspaf
|
|
||||||
TIyEVGEKYA6zmMdM5jKb+cxoTrP+mtcM5iok5AU4jrOc50znGztANPhQsp73zOc+JznFC1lxnQdN
|
|
||||||
6ELTWMcI6bGfF83oRhuZyQhx8pYnTelKWzrLXUbIl9nM6U57+tNqdjNC4GzoUpt60HdeTJ4dzepW
|
|
||||||
LxrQChH0qWdN60PvmBeKdrWud/3oJl/618AONpYzfZBNg/rYyE72mUV9EFLX+tnQdkeqSbdqXlv7
|
|
||||||
2qWAdULOYYZue/vb4A63uMdN7nKb+9zo7jYXIIAQDhDg3fCOt7znTe962/ve+M63vt9di4TI4ggA
|
|
||||||
D7jAB07wghv84AhPuMIXDnBZJOQd6Ii4xCdO8Ypb/OIYz7jGN87xiL8jIexIt8j+R07ykqPbDQiB
|
|
||||||
wB/2zfKWu/zl+uaAiqNNc1oj+iC5xrbOWw3pg0ha2EAP+qWJbRBjK/voSP80sw3i7Jo7ndDTNle1
|
|
||||||
d051RmsbIbJ+utbnfHOD5LzqYN9zzw3yc6Gb/exWJnpBjJ70trvdzEsvSNO3TncbR/1jUw+73pF8
|
|
||||||
9YNkve6Al3HXC/L1vRt+yGMvSNnRznjGq50gbH+75N8ed4LMPfCYb/Hdp5X3w3v+x303yN8zn/nB
|
|
||||||
E6Twn/d84gmy+Ma7PuiPH0jkJ0/7o1d+IJcnfeA3P5vOp/7woS/IEOZA/OIb//jIT77yl8/85jv/
|
|
||||||
+cUnBEJ+oIXqW//62M++9rf+z/3ue//74K8+LBKChWmY//zoT7/618/+9rv//fCPv/mxkBBzkOP+
|
|
||||||
+M+//vfP//77//8AGIACeH/mkBD2AH0ImIAKuIDPxwQIQQjhF4ESOIEUGH4/MHO6p3umV16/14Gr
|
|
||||||
NxCt93oi+GuxJxCzV3soCGq3JxC5l4F0x3vv4XsdqHfBRxCj54J0t4E8NoOp94ECEYIjGISTVoK8
|
|
||||||
cIIpeIRstoK80II4+HQweA8yyINVV4MDcYNN+HQ6iGtSqHq+JoReWGlEaIRIOIbL9mZXuHt4toXA
|
|
||||||
h4FnmIO3hnpquHM+yAtA+IV2OGVhSIZ6mIRm2IYvmIZxSIMMAQUvUIiGeIj+iJiIiriIjNiIjviI
|
|
||||||
kFiIS8BuB5EA83CJmJiJmriJnNiJnviJoBiKoniJOJAQ2ZAJqJiKqriKrNiKrviKsBiLsjiLqJgN
|
|
||||||
CREPbJCLuriLvNiLvviLwBiMwjiMxJiL8ZAQhhCJyriMzNiMkDgCKZcKoziN1FiN1iiKCcCGfoiF
|
|
||||||
bxiIejeHdXiH4tgLebiH5liGo7aNW/eEUeiNvEaFAmGF6lhrWQiH7shr4DiO+oiHXnaO/khmSsiE
|
|
||||||
8zhr7HiPU6iNAwlt9WiQVJeP+/iQ5NiP/ziRUxCQCVlzBcmQOgePvEAEHvaRIBmS3pUBAoAQrsAH
|
|
||||||
KJmSKrmSLNmSLvmSMBn+kzI5kyjZDAkRCgSWkzq5kzw5YKGQEGJQYUI5lERZlBQmBhgmkkq5lCC5
|
|
||||||
CQghAI1Ak1I5lVRZlTPpCgzRAG+wlVzZlV75lWAZlmI5lmRZlma5lfRQkgehACfWlm75lvBVXwgR
|
|
||||||
B3JQl3Z5l3iZl3q5l3zZl375l4BZl3GQEOJwBoZ5mIiZmIq5mIzZmI75mJAZmYYpDgmhCWd5mZiZ
|
|
||||||
mZppliTwlCIGl6AZmm2pAAh5kTbXjRqJbQ4JkfpYjhTpjxZpmtCWkalpbRwpj7JZaAtZm9a2mqwp
|
|
||||||
jq75muYYm7lJa7TJm7p2m8VJj6iJnLrmm79ph8EpnHpInMtpasfpnKz+xpFOUAPe+Z3gGZ7iOZ7k
|
|
||||||
WZ7meZ7omZ7eqQKUaBADAALwGZ/yOZ/0WZ/2eZ/4mZ/6uZ/wGQMJgQa7EKACOqAEWqAGeqAImqAK
|
|
||||||
uqAMGqBokBDrkA4SOqEUWqEWeqEYmqEauqEc2qESug4JsQbqOaIkWqImmp4LkHJ6wJ8s2qIu+qL7
|
|
||||||
OQCleZ2EtpvayXNdGJ13OJ3UOYbWSaOFlp03anUzCqR0ZqND2mjQqaNCyKM9eoQ/aqR1JqRJ2mfK
|
|
||||||
KaW62ZxVumhLyqQj6KRPioJRiqVyRqVbqmdXSqZ1hqRnymdd6qWvB6ZhSntjqqZ2BohtaqUM0Z0n
|
|
||||||
2qd++qfmyZ4I8Z7+MFqohnqo+OmfCAGgDdqojvqokLqgD4oQEeqhlnqpmJqpHAqiCCGigPqpoNqn
|
|
||||||
KXoQELCiiHqqqFqoMhpodrqmWpqnevamcNp4cjqnklenrUpjZgqrRpamuYpjbMqrSCars4p2tWqr
|
|
||||||
boervxpjuyqsQ+ary1pjweqsRUasxWp2x4qsSaes0epizUqtQMaRWrmZ5Fqu5jqWaYkQbCma7Nqu
|
|
||||||
cZkQdBmY8jqv9FqvfzmYCFGYkrmv/Nqv/gqZlIkQlnmuBFuw5NqZByEAn+muDNuw+ECaC+GRTDmx
|
|
||||||
FDuSamkQJ2mVGruxHAuTNokQONmTIjuyJAtgP4kQQWmUKruyLBv+YUiJEBlWsTI7s9XllAkblR2b
|
|
||||||
szqrsVjJqt1qY9MKrkJmrdcKexKprWLahz+rq3gqtEUGrUsLY0HrtD9GtEUrbNmKtMrGrUv7rU4L
|
|
||||||
tVHrYlNLtaVgtVcLbFmrtcjGtT/rtULLkVHgAHI7t3Rbt3Z7t3ibt3q7t3zbt3JLA7eGAZ4wuIRb
|
|
||||||
uIZ7uIibuIq7uIzbuI47uKCQEJ1ADJRbuZZ7uZibuZq7uZzbuZ77uZTbCQnxBVVQuqZ7uqibuqq7
|
|
||||||
uqzbuq77urBbul+QELjgt7Z7u7ibu317DqIRCI/7u8AbvMLruBhAWsZ7vMibvMq7vMzbvM77vNAb
|
|
||||||
vdI7vdRbvdb+e73Ym73au73c273e+73gG77iO77kW77me77om77qy1VnBEblsRXNlEGawRa6ARr0
|
|
||||||
K0nzEhRCcxDlwxZScRdxYSnRIxRwsr4GfMAPkQJUxQtAYFdDhRhqQCSEhRCh8TBGdMHumx5ptB3k
|
|
||||||
gSK4UQcaYxXKssAIXMImPBCqARsXpMF+EBcSxUB0wRVJNDnkZcFEdcPRJB7bcUkFUUuAEysnHMRB
|
|
||||||
TFMt7EVpUkRTEVYZVMEChMEGZDV/cyN2IUOpoUtRBMRCnMUHrMD9IRm+kkqE0kCTUcNNjMMvHEVS
|
|
||||||
fMYcNcJa3Mbqm8JLIylcDMZ2ARe3VhVskTIzsy0eoxV6BD3+ilEv5vNVblzI3qskMXIx/aTGhUQw
|
|
||||||
2EHGH4S/TvFFDrQVVIzCVvzHhrzJ3ptTldO/ZIIYq3LHB3TBTEw622FH0bHDJOzDaMzJsAy+9vFD
|
|
||||||
qHzGFyRdCXHKryzJ1+EhGlzJTQM/t2E/IUzKsXzM19s8aSwzvDIzuQzJeJzHzJy/QLG/G1wiTXU4
|
|
||||||
kYzM3NzN3vzN4BzO4jzOZpUCr3TOr4TLH4FE6PxKcUXO8BzP8jzP9FzP9nzP+JzP+rzP/NzP/vzP
|
|
||||||
AP1YuTPQBF3QBn3QUexXrHPQDN3QDk3QCb1XpfPQFF3RFg0hjtUzGr3RHN3RPGPMZiUzHj3SJF3S
|
|
||||||
NwPSXAX+yia90ixN0hm9VXr1Eyh9VTKdWDWNWEOF0/K7VyOCWDd9WD/9V0HtVzl9WEWtWD0N1Joc
|
|
||||||
0kvNVUO9V0dN1DutV0ntBZhw1Vid1Vq91Vzd1V791WAd1mKN1YEz01b10zfwCmq91mzd1m791nAd
|
|
||||||
13I913Rd12p9A2WdWDl9DWPd137914A91l5AOC/NgWRLZD331DGNFWKotlub1zrNeYdNZLAW1YiV
|
|
||||||
1PZItond1DTN2I5Np5Bt1MjTjlRb2VOdV5g92YgX2kLt2Z99q6wt1ZKt2kFm2oW9g7QNZJtt1lX1
|
|
||||||
04392ioY21A92rkdroTdWEnNCKm63Mytn8sg3IsdHur+oKnUXd3WvaHqAN15ldOE0Nze/d3yyQjH
|
|
||||||
zVipXdxLpt1u5dvATXnojVY5DYXm7WO2jdySkdlUu9s27drrva3tfVbvTdpfO96LVd7mjd8+rd/7
|
|
||||||
bXv9Xc7EHd/zTd71Hd9lu+BOjeAJnmzMptjb3eDm/eADLhmECt4inqqKOi+8rU4/XanXveIsrqmc
|
|
||||||
auJ6fR2lOuI0fqqryhen7VYEXtwGrtTh8dsXvmYZztlW9d8S7uFIHeHx3eOt/eNBruDaE+Oz3eEC
|
|
||||||
nuSGXeAU3tlO/uQYnuVFzuHFjeSJldTr6rBmLppyCeMHHh76+q9u/uZw3pgBq+aiPRAKe+Z4DpoQ
|
|
||||||
i+P+t80LjpAFgB7ogj7ohF7ohn7oiJ7oir7ogO4DXt7bWOENLTvplL6y3vDo6pTTAtANjN7pnv7p
|
|
||||||
oL7ojlDlY67kWB7lay57XN7lqF7nvXfkpH7Zps7jmH5O6r3qxzbkJ35ORu7gsX5YO57bTO5Xt47r
|
|
||||||
Slfr5tTrVK4eOY5WST0MbRDt0j7t1F7t1n7t2J7t2r7t3B7tdIDsgfTT8FAG5F7u5n7u6J7u6r7u
|
|
||||||
7N7u7v7u5A4P4M5HOQ0BD9Dt+J7v+r7v3D4Mv/5XwU7bwy7RFm7sfNjqf6XsYf7vfhXwqj3w0a3q
|
|
||||||
Bu9pui7lr+7rzN7n9u20EJ9XxT7xB0/nCQ/muS3+5rJ+5bSO8MRe8CCPZhUf2Re/7HxO3wNBfRV4
|
|
||||||
8zif8903fipP8OFhfwMY9EI/9EQfgAXY83rF3Tq/9Eyf8xeY8TSP26cu8iu/5S0v5PO+Rwpf8gzP
|
|
||||||
07Mu7Fl/Qh9/9S4f9iG09bRt8sD+9QJv9iA09mQPd24PPGiv2moP8Gz/8HP/M3Af9wC596ZS95N9
|
|
||||||
9w0vGe4Gc4if+Ip/b/2G9B6PFRDXcZI/+ZRf+Rv3cY7vVvW+covf+Z6P+DIH9RCO8mCf+WjV934v
|
|
||||||
Zi/v6jEI66L/4aTf9qZ/Vqif+m0G+KAi+IdN+F4f+3o/+0xt9bb/98Cf0iSf9l1P1ZIRAnne/G3+
|
|
||||||
meYant5Y8Q1jUP3Wf/3Yn/3av/3c3/3e//3gX/3fgPufoukL6/zoL18hkPyoLRl/HurwH//yj+iO
|
|
||||||
XvxaPhCSXun6v/8Sdun2/+UAwUuggG5ZDB5EmFDhQoYNHT6EGNGgI4G8UgComFHjRo4dPX4EGVLk
|
|
||||||
yIwAUlT0VErlSpYtXb6EGVPmTJo1VV6qeA/APZI9ff4E2lMnT4FVphxFmlTpUqZNnT6FGlXq0So5
|
|
||||||
dwbFmlUryYs58dkEG1bs2JqeKnbdmlbt2oomUZKFG1fuTJwCh7LFm3fk3aJT/f4FHFhqVbtX9R5G
|
|
||||||
nBEtr3tf5z6GDNeswMWJLSd2KzBlZM6d6Vr+JXpZtFq+vIwKRp1a9VPCjA2Php11cWPPtW2vnGwR
|
|
||||||
Y2zeWzPzwuBJ+HDixY0fR55c+XLmzYWDAt1butDXX6pcx55d+3bu3b1/Bx9e/PUv0aefBzk7kHP2
|
|
||||||
7d2/b47h7G709UH+tp/fdWj99kv3r+8/AM+rbEAC6TMwP/wS7E1ABmNz8MHRIpTwsgIrHO1CDGNb
|
|
||||||
cEPLKPRQLxBDxGtEEtfS8MS8UlTxMABWuSdGGWeksUYbb8QxRx135DHHSV5rUUQAJumxSCOPRDLJ
|
|
||||||
GH/kL0i8LlIySimnNHIVBJ1EDAAtt+SySy+/BDNMMccks0wzm8SSNDPXZLNNN9/0Es00t7r+CE47
|
|
||||||
78TTzTkTo7JPP/+U8Yk92XoCUEMPRVLQQdW6BlFHH8VxUUknpbRSSy/FNFNNN+W0U08/BTVUUUcl
|
|
||||||
tVRTT0U1VVVXZbVVV1+FNVZZZ6W1VltvxTVXXXfltdfD6rAgIwvqyOiJk1zDyktjkOVFWWYz0mlL
|
|
||||||
cPz4qEsqQrtmlToAACcFQaPt8pYvj7WACi2pCFYgbjWyUk5f34V31xSAyAiIVRTbTaeN1ABCSyAU
|
|
||||||
5QjIwtRFU1+NDOZlWGo7MuwJbQW9po5VruFFDSqo0EjgZvlbhYqF/aDi3mYBUCOjbd2NN2WVY1UD
|
|
||||||
AEWfAGBhXvzYdmCNwFnliSeoWJbhgnf+0xhhqxQDx6PXYObJGHoreqLbktB8zQJwAOblCWCbpeLY
|
|
||||||
mc1FeWWvv0YVnHRprugasfO9khdjFBU6458J3qjtZ3m5BgCKAw7Nap1J1mgSjNuCOjQqJtkoBYyH
|
|
||||||
LFqgVZgEu3HHUZ1Xca2NIRLtj1JIHO+4gX774Cs1hrvqVaiVW2iNXwsao53AKZmXOuru+nHZZ6+0
|
|
||||||
ZUHraD1yg+UWyNg6UPbSZi9PKv1zd50t/umNUH97pxROAnlj2qen/lJ0/Uj8njq+tXyjSeow5m6f
|
|
||||||
Nw8d2rSFrlt8tyv6UQ2YW2f/7/IBr2hw7w+/R42iF5e+ev//T9Mk7HWsOnEpRmnDXOz++me++dmM
|
|
||||||
gWfJ3PL4cxWlFctp9FufQIZFNasF6yqse90CAThCEmKobqwj39yqxreQpK6BKnyWwowWmu8JJGIT
|
|
||||||
q9jFMqi8inTsYyGDm+H+BroSFtGI9qFCBIfmGi4ZA1xbmmEKv8TELS3ridOqFpeoAL9sbatbVBNh
|
|
||||||
A8t1LsLBrWVlJOIR1bhGNrbRjW+EYxzlOMdQpcAYd8SjMeCHGAvkEY/pomMgBTlIQhbSkIdEZCIV
|
|
||||||
uUhGNtKRj4RkJCU5SUpW0pKXxGR98rRJTnZyS1pD1RM9OUpSnmlVoixlKlXJJVgBwBjPg2UsZTlL
|
|
||||||
WtbSlrfEZS51mcsOlUonq9hlMIX+OUxiFvN57Trli4y5TGY2M5jGSJuqelmqaY7KRKC65qey6SkW
|
|
||||||
naqao/pmqLbZqXFyqpyb6qapwhmqdWozjaI6p6bimal0UlNryshHPvW5T37205//BGhABTpQguoT
|
|
||||||
fu30VGlc0AKGNtShD4VoRCU6UYpW1KIXZagLzJOq0lSioB8FaUhFStAozKeVWsuHO1S6Upa21KUv
|
|
||||||
hWlMZTpTmtZUpbMIDULJ+Rpi9MKnPwVqUIU6VKIW1ahHRWpSfUqMjYbyNS+waVSlOlWq1tQBJn3V
|
|
||||||
b1JaVa521asyxWlbQHmq0vRUqWdFa1rVilSmFkaB7gwNVL86V7py9aqUiWaqtFr+V772laZhVddY
|
|
||||||
TVXWtRbWsIc9alv3k8y4+tWxj13pXXVz0opsFbKXrStgmyVYX/IUsZ8FrWEVO09MlUaumEWtVyVb
|
|
||||||
T1L9BgovgG1sZTtb2tbWtrfFbW51u1vYLgECYmVsRWxxDOIW17jHRW5ylbtc5jbXuc8lri2aStbX
|
|
||||||
GIK318VudrW72xFg1VV7TW14q6pZnZrTs6FFb3oTO93BPlW875XqavOKKvDC175gzSlnSUVY9fbX
|
|
||||||
v0tlb2cbe18Cv1S+lBWIZQu8YHeQV7/WPO9/JRza0b5TnO5lMIMPnFWtEWEWHwZxiEU8YhKX2MQn
|
|
||||||
RnGKVfzhDAgAuKoqTShUMWP+GtfYxjfGcY51vGMe99jHMw5FgPf7miWs2MhHRnKSVbwJ77bqNw14
|
|
||||||
Q5SlPGUqV9nKV8ZylrW8ZS5HmR4uDmxwBRIHOZTZzGdGc5rVvGY2t9nNb4ZzmeMgZAiHRhNdxnOe
|
|
||||||
9bxnLpOgyayqb4YJ7GAx88KsE0b0YSv81oRiWNAE3vB3UfroAhMaxhFOdKbTuuhCn5bS8I20kyf9
|
|
||||||
aftamqOY1nSq2UpneDqa1OINNaC15oQa1NrWt8Z1rnW9a1732te/BnatVfDbMF86NGjYRbKVvWxm
|
|
||||||
N9vZz4Z2tKU9bWonGw2svnBo1hBsbnfb298G9gL+vKpAvzq1pnZqaA6tanb+F5XTxq6Ip82N2liT
|
|
||||||
e9TzPnd+C73udvcbqO8+9YDxTe9xS/PeA78suqmrbn83/N/YxqarEf7Yehu8shPHrMLby3CHOxzg
|
|
||||||
6Y43xi9bcb3OGtwnR3nKfT3sFwe8IsiudsxlPnOaT/vabi30tlW+c56fXNx4RTAvFCzyvmpcwBXh
|
|
||||||
d8fZ/fGFh5zojiU5fQ/+9MzqG94CSbrSU830jTud6nyNujen/vWvGn3IHNd6u7l+dIHIm+yqLXjJ
|
|
||||||
KwJlPtfd7nfP8pdbDvIxx9nvfwd84OE8Z5xfnRd3xnviFV93PwOdwxXxsJIlP3nKn7jFe2+6QGT8
|
|
||||||
Y8533vOf73GQC+9ygRT+ufKnR73kmex4SV/87XQ1e52RnvZ+r/3sXn893Fkvatfn3quxbzXaab91
|
|
||||||
iMMV976vatjVOXbkSxX42Z798FVte9m3vfldVb49KzKEYHTf+98Hf/jFP37yl9/850d/95VA7M0W
|
|
||||||
WhZHgH/85T9/+tff/vfHf/71v3/4y6L4jQ6NEUi/ASTAAjRA9HODuJO63ru+qXq+iBM+6Us06gu+
|
|
||||||
42tAm8q+1mK+C5ypBzQ+rJNA4hs9vuMFt+PAmcpAcNrAE4QpDwTA6AvBCfy/nRI4FqSpFBSVcrPB
|
|
||||||
mHJBGoTBGJwwCoQ+69vBG1RAsdu+OVDCJWTCJnTCJ4TCKJTCKaTCKlz+QkLAvK4TCCyYhi70wi8E
|
|
||||||
wzAUwzEkwzI0wzNEwy7Eghk0r9CwByuEwziUwzmsQiY4wuVjwCJsQasjPUMDQhkcwcwrQT1EwTvU
|
|
||||||
vgQjRPzKQrbzwz8MQjbcFNNKxJjCQXZawUTswTb8QUfsLyGEQAucRJWqRFDRwVBsMD4kwazjRAqD
|
|
||||||
RHmSOFN0h1H8lN9oAmWwxVvExVzUxV3kxV70xV8ExmC8RfEpr0h8DRGQgmRUxmVkxmZ0xmeExmiU
|
|
||||||
xmmkxmQUgVbMlNIQxm3kxm70RmG8AkPUQFkrNBI0x1NhLRUkR8M7Ry1MlXTMwQdTR3YUxHYsFXhk
|
|
||||||
J3Dwo33kx370x3/+BMiAFMiB5MdidEWeIciEVMiFZEiC5JpkQsiGlMiJpEiBBIf5OpWK1MiN5Mg/
|
|
||||||
WhU16MiQFMmF3KNTAcmRRMmU7MdMYsmWdMmXhMmYlMmZpMmatMmbxMmc1Mmd5Mme9MmfBMqgFMqh
|
|
||||||
JMrzuJqKGJZiORbeGQnkAZousaLz4RIsAomWWZr5QSWTQCXisZaFcaUHEoh+OShncZaiNEv0iJyK
|
|
||||||
sBd8caCK4Bd/ASMeeiAX8hykrAOZ6Yg6ARgieg3eEZoU2J6RKaNngZkOARILO8vEFA3b6Z2YqQia
|
|
||||||
6Z6MwBmd4ZkoqsswgqG/VKKNAJajxMzy8UvjaRZjCMxnmQRwOE3+CZJLxWTN3hAbgSAbGzqbthSI
|
|
||||||
taHN1RSezgFLurEbj/ADl1mFq+TL0AjNjKGYnaCCpUGYrKmbkjxMRmvN6ESRpQGmiqCc3cFIzLHM
|
|
||||||
udTNJcIgjgjOmXGZFwLNaPpLNMofxzSY5uSFrNmhz5TO+MwLxsQdyqAX7OwI3wGeLhGeLuHKFPpO
|
|
||||||
zlyYOkDP8SmMLuEJUTrKqwDMQtkNvxGIGlrN4ZHPCsWL68mewMRP7wEf9VHNy6TL3UyfjvhNLSLP
|
|
||||||
BSrOHkocwwgZgzEXLsHL57TQGc0LAapO3UBQuUmgFuqcEPVOi9jMHhIZ8TzO4yFO80QQgzGMlumK
|
|
||||||
ERUIIApQxKT+0SkdiRMqSWZpm/cRCbr0UQeSIY6wGrwkUPjsSyTlzvnACMPJCAmdHyml0jf9iCTi
|
|
||||||
COxsIlTaziWaIlGKSmnBS41IyozomJFhpe9EpajMiLqhFiAxF15AzUN1zDYNHjiV1Eml1Eq11Ev1
|
|
||||||
HzvaxyvNiz7aR0DC1FAV1VEl1VI11VNF1VRV1VVl1VZ1VQNxpliV1Vl9Hme4BVrF1VzdJVRwBlTQ
|
|
||||||
1V8FVlniVV8N1mLV1WE11mSl1VtwBmV11llVl1WS1mml1mq11mvF1mzV1m3l1m711m8Nk2KTJmdY
|
|
||||||
FUkAAEko13NNV3RVFWfASFFBC4PUFAAgV1UxV3ZNlXtd11X+cVdWiVd5zMF6zVd1tVeCHVh8RZV+
|
|
||||||
XZV/dUtIcdg+2UuBVYOHpdgoqQh9tYuK1dgjuViD3diP7ZGOxVeQJdkcqQiFrZqSVVkagR+GTbDU
|
|
||||||
g9mYTbEMyCmB9QR8wNmc1dmd5dme9dmfBdqgFdqhxdlCENmK4AbQU9qlZVoe44ajFQhrAIOppdqq
|
|
||||||
tdqrxdqs1dqt5dqu9dqptQao5QXTk9myNdtZoIGTpY97YAWiddu3hdu4HdrccFmhg8WWIi+bvY29
|
|
||||||
7Yy64AWMbcRV7ESxPY3VMNzDFYzWAFwTDEXJQlna4NvInQu6BZpLJMS8fQvJ1Vyy8FvAVUXBRSzF
|
|
||||||
AtzCRdz+0jVdp1Bcg2XcSXTctXWMzYVdm6BccR06WMRczYjd3KWJzjXYzwVd0SLc0xXe4UWK1MXX
|
|
||||||
1U3E1vUK3WVemJjd9hOIczCD6aXe6rXe68Xe7NXe7eXe7vXe6eUC9qPXiuAAAjDf80Xf9FXf9WXf
|
|
||||||
9nXf94Xf+DXfWhDb9+O/+8Xf/NVf/fM/gQDcd0CHABbgASbgAjbgA0bgBFbgBWbgAH4HsWWH75Xg
|
|
||||||
CabgCvbeBBQIlIWAP5DfDvbgDwbh+OUArCrFULxdXtiM5lXhmxBb3/3dtRJdgyVd4qVhwzVeUGxc
|
|
||||||
tV3eFV7h5y3hSTzhFOZh5uVdfHXhF9604K3hJV6NGyb+wrsVRR22i9cdYt31YcvVwyCu4uYt4k1E
|
|
||||||
YkVTYiYW48Bw4kGE4ijOYNfdYua94jy03ZrN3DWO3S4GwS8GrRjG1xke4z2GijJGXkJU3imW49xt
|
|
||||||
Y4EYAjpE5ERWZCrEQnUR2B/QgkiW5Emm5Eq25EvG5EzW5E3m5EiGBbHlwjQU5VEm5VI+wzX0X4M1
|
|
||||||
B3Jg5VZ25VeG5ViW5Vmm5Vq25VtmZXMQ2zdc5F72ZUS2wzSuCELo5GI25mNG5k7+ARLG4iLU4kGG
|
|
||||||
XToOXDsG41TOYz7G5qjw4zNGY154XCqG5sgtZLvl5mcOZ8mV5iOm5lWz5orQ42yGZ6oQ2z/Ww0Bm
|
|
||||||
DHD+PufbGOfaNUVzzue9Ted1Dt0wjueCnoJt5mZ7htx/3tt95uZTbAu9ZWiAbmGBrua/lWGD1miE
|
|
||||||
PmOFxueJ5oxx5r4DJOmSNunyW7+IrohhaIOWdumXhumYlumZpumatumbxumWpoP63d+e9umfzr/+
|
|
||||||
xWh8hYcyMOqjRuqkVuqlZuqmduqnhuqoNmp4EFsBPOmrxmqSxmBvpg8IeICcBuuwFuuxxulhYGY3
|
|
||||||
7mc4xl2Qto2AtujCwmN31miD5mgo9mi2tg2HLme1RmG8rg23fmu1iuu+mOt4ruu7vWu/7gy9PmN/
|
|
||||||
VuzHAOzARqvBNo3CNux5fujEfmzIGOfIO9vPTr3+y3PkinAFPjDt00bt1Fbt1Wbt1nbt14bt2Dbt
|
|
||||||
ZhDbzWva28Zt0BO9oa4IMfja3wbu4BZurxUDsSVb0EbuyVs9rq4IAWgE2Ybu6Jbu6Y5tVzhrgaC7
|
|
||||||
xdPu7c47MGsWgVUAuRXv8SbvoDXadu47wVPv9WbvNiM83hYIcTiD+abv+rbv+8bv/Nbv/ebv/vbv
|
|
||||||
+RYHsUU87ibwAn+DxmPugWjb8mbwBhdvBbhucm5svhbizZaLyJZspaLsd7ZsJj5sWNRsC5cLxoZi
|
|
||||||
xxZxzq3oDJ9sgu7wMf5wUwzxEycLEr9bE5fxsMBwFV8v9K7sFufjF89hYRbkG5eMCKe1nkPyJF/+
|
|
||||||
OfEV2AEAgSeH8iiX8imn8iq38ivH8izX8iePAbGFuZoD8zAXc2i7OfjmhXVIhzRX8zVn8zZ38zeH
|
|
||||||
8ziX8zmn8zRfB7HVOSXX8z2vgZ9LcF6AAD3Y8kEn9EI3dC0fgAjnZxOmcCKHixzXcXdjcR9fYiBn
|
|
||||||
XSm+Z0efcUV/aBvX9M/gcXWO9F7YcErfY0tPXkxf6E+XXU7fa5Vea1a3CUgfdaEqdVMXY1QHZFX/
|
|
||||||
aFl3XlefcFjva1+vCVqv9YfjcQ7H9dPV9XrmdWIviwgvAj6ndiVv5O+uCEY49G3n9m7H8mUQ23oY
|
|
||||||
83En9zCvB7FVhzpX93Vn93anc3XA82qX953+83OUJQRvx/d873ZGAPYSb3RoB3UzF/VIv/Vlr+Fm
|
|
||||||
L8IYB3iXoPE3FvYKX/iWMPZjB7BkN/hKx+yEfvaI/3XH+2FM/HeOd4mJp/iCv/jhRfgdVHiRL4Vx
|
|
||||||
zm4Dh3nF07vRFojwdvCbx3nzFlsya++e93n1fm/Ale//JvqiN/qj7+8A5/EBj/mmtzsER1kBWPCc
|
|
||||||
p/qqxwcI9/gOS+6tlzzRxnaBKG3qFvuxJ3vXpm0et+3cVvu117HdBlzfHu64l/u539ri5vHj5vq8
|
|
||||||
T7HljvrnLvu/B3yxt+6sR2tGf3iWH/kUp3iiMvmTZ/aM7+iNR3zc6PcaD/nJLwWSP/bGd/z+0k15
|
|
||||||
G1x5kW/4tD58zGfhUF98Sbf4zhfez2fB0Of4ca6E7aL92rf93FoCvg6ES+D93vf93wf+4Bf+4Sf+
|
|
||||||
4jf+4+d9KwDlTGD+5nf+54f+6Jf+6af+6rf+62d+VDZzFmCD7vf+7wf/8Bf/8Sf/8jf/80f/7mcB
|
|
||||||
sbWu23f/96d9XFD1QkD++rf/+8f/4w+ECNcrgUUVwAUIXgIHEixo8CDChAoXMmx4UBIASQ4nUqxo
|
|
||||||
8aJAiBIxcuzo0aEzAB9HkiyZQiQvAClKsmxpEYAzlzJnItRI8+ZNmzh3ttTJ8+fHkECHejwpUCXR
|
|
||||||
pBdhKm3q0KfTqA8jSq1qEKrVqkKzcjX+mnLVvbBix5Ita/Ys2rRq17JVCyBa27hy59KtG7YVgFZ2
|
|
||||||
9/LtGxevXr+CBwsGTPgw4rnRACRu7BjtKpQAJlOubPky5syaN3Pu7Pkz6NCiR5Mubfo06tSqV7Nu
|
|
||||||
7fo17NiyZ78W+Pg27rCSIOTufViAJAG+h/sFLpw48rrGkzOXC0FS8+hxuVKvbv069uzat3Pv7v07
|
|
||||||
+PDix5Mvb/48+vTq17Nv7/49/Pjy59Ovb/8+/vz69/Pv7/8/gAEKOCCBBRp4IIIJKrgggw06+CCE
|
|
||||||
EUo4IYUVWnghhhlq2N0TFvBizEIgJmSMMSlQoUaIaohI0IofbvgijDGilwKIIF5DhTH+JxbUokE1
|
|
||||||
NsTjQC0CKSORRRqp1CQe+rHSkj5a4Acv1/BYIonXuPjhNeCkoOU1JuqYQgoe8rJll7xYQAUVHoLo
|
|
||||||
B47gCDTkkXHKOadH1wDByyrXPOFji0vueA8v96xyJZ+8qHHnjR+iGKSLVDzBCzh78uLoE3XQeSmm
|
|
||||||
mVrkIxBW+mgoECvtyKiIhVpQolFTYqnllvd8Cqemscp66SSrqEliHacGusqjPQIq6KSGFqrGSh1e
|
|
||||||
SeqVkzT6RKWzOvssndcA0OubLq6CY4kFgUnio9eC6aKIXkJZarUgnknFSmvieOex0Lr7Lrzxyjsv
|
|
||||||
vQx1CSaYVta7L7/9+vsvwAELPDD+wQUbfDDCCSu8MMMNO/wwxBFLPHF1VOhrgbK8GNuuQiSSqOaH
|
|
||||||
HqfLIonoHlRHyYt6uZKKxqBM5ctK4kjFuIMKtAqsCIUpkJ0DiZkzySSOzMvLxqhYUNHUBukyiSiu
|
|
||||||
/GbJYlL0hJs3L2os0AQVjWKNIrfrsckGvazjmGiudCrT28ZcdtjG2Ixn1tqK2bNAPzvkcbZde/x1
|
|
||||||
yaIS1PLLvLCZI5Qh57jo1FXjuWjhcQu0tYhFgzxQ0ifnKOrgNJuJK5VMG822qG4PhHNFFtedsZnV
|
|
||||||
/ugxyHh/CvXlBqGNMpMzFz424hdNknGnAtGoepQz5w58uaMyerPUx0u6s5l+Czn+0D1APPoEEK4q
|
|
||||||
Do7jAx0qUJK2odSil8kTTyiLxgN70IrMWzB0sBYBsSgVA/3e4o2H9ziqqsfjKf6Vy4u5vv6Opb50
|
|
||||||
XS97AtkeL7o3JnINBAho4p+q8gc8WyFERNGbXvWuRLeKvE8g8TPU9whyD+Hd73gSvNL5jBe/C2os
|
|
||||||
g8RL3/8IOBDsVWR3AundAoFXP7KVr3wnXBEF0Wcb6bUQUCLa4EUSRTWBNAl4T4oSkCJoPB2yq4dP
|
|
||||||
YN+xnnczfUUJZ6uAkh9IV5FITcpK1GPgzTxYQhP2UH9wWtHzVvTBigAwjEycH0GeKKU1Fq+Nx0Ki
|
|
||||||
6q74tQDC0YdfFJwYKUJG0xH+C43EEojiAgiuKf6xisbL00CuMagjWnIidbSZGMGHIkAOkmNa5Jjq
|
|
||||||
QIRJnr3tlHE8ZBgNGDyNVa2RToTSHik5ST+uiJSqW2UXNdhJi1jMT5JC40D8tKO9gYt1pRwf0XBl
|
|
||||||
xDa6cplqGBRYZDkmCzzhgyk4GioltcymXaloppSkG30YtYssMQVQOiYqBec3ygmtXM48JSpfVodp
|
|
||||||
prOf5bomnlxlkTB184biBBIp8cY1w+WNlxUcn97AMTyHtBNKk/ADMpM5z8fVM3IeW6g/tZYjcOQy
|
|
||||||
pIUkFUCzScxrKFN6GZVnj5ipt4YS8qHnxJ1HdrcKFPUOmYfaKETPqb+ECqT+oNXUHzA1CaL4xU+b
|
|
||||||
h8JYoIbWoiumQGlBfSbw3lhTbRrkfR/sKcd+KkQfUrKXwxSRUampVmQxNZ4LeaqyUsDPqa6CV3zc
|
|
||||||
ZU15NsxfclGTbqWIV1tIPhGuAqil/CE6r3SopLZyrcVrqzZ16rS5/i1UY0WWQ/VqU8b+1SJ2+qDH
|
|
||||||
cnUsQVlVkq974eggyKgB5jVQRKSeQFNQ2M4mhAq9m91pO3jZVPoRhW+bImu5WhAL1BV2uWoRaW2K
|
|
||||||
2dYGUa2sRa3vYugi2WJxIra1Eo1cxr49cVGXp31mc8332gwKN4/FBZzRWgRA5Q42rym0YvXGCyjo
|
|
||||||
brNuI6MubQ/yWd/hin3+yd0tXukb3h6yELb5BexGPUqia9XTuwxNF+vAZljJ+c5smWWi7VwkLU/p
|
|
||||||
bo6qK5oAzOngaDYNbyup3G6fdmCG1KFwpBIZg7PlYBOTOL19s9zHKhw2+oKuWhtecUEm4eFyeuwE
|
|
||||||
2CPRXWc60+zGTrmZa9xIWtxDEx9Zxpml8NZQjLSPCi7Dre2xhgHAYfclmKMLxhZQI4g3hqKtyZd9
|
|
||||||
MjQpJuc5y+he+OouR/AFpvmqZ3344t9F/AwmQGfFzvn6iKFTgOfz6FmuIxE0865zj0aPJNGLNk+j
|
|
||||||
+dyRTNO5057+NKhDLepRk7rUpj41qlOt6lWzutWufjWsY91q0frMUgP+EWSgULIUy4DoHpLhda4N
|
|
||||||
4mvKgMPFB/F1rpPHmGFbZiWX6bVlNJcSTWvN1rdeRR0AUIeqHuUy3aYMDvkIhN9KK3d+YwxGmE2Z
|
|
||||||
YKfE29MuiLqLrRBkpwS5IsEMiDDz7cnIm91dBcDwXDUZ3ap7Mr+qTL8REm1AneQy1JZ1VFJgyXET
|
|
||||||
xCv0ruzASzsQdMNbMg+/OPR0bQEpIwTZvq4DtTh+FE2rPOQVR/m7DeKHybi4m71Tg21XfhCOPwHb
|
|
||||||
pX1kMq2dwEh6JebXzjYPha1rlxudIC3398iN3fFuow7kLX+6zn0Hc5DfejLzVAMAlHXFrS+d6WYi
|
|
||||||
+c7n23OYew/i1gH+e6+eAAAX+yHbbS8IOHjVTVhhnd59L7u/xxTJqfvayldn+cfLjm6s82LcFPdd
|
|
||||||
JMFuJca33MoDmQS10b7je9g966Mznc9LDni/P7zpgd9SQvzusl5ZHfFpd/rBDzIJcMyeRfNMU+DN
|
|
||||||
LviEqFzufOa6260CDjHVPZPDRwnwjcF6wG888Z7X/d15JmbR5xrsizo87JVekOljXe5+GPlAqIA6
|
|
||||||
2zyK8pq2wOBRWVyNAbyotNf10x39fBGO3uOvpz9Bfnxsj+c88Ng3yNWhCPBNiqK1H/vljhpYyQCC
|
|
||||||
nP4BIJ9VCrUMYPBFHLvM1ptgHvIxn/ykX/Npn+nlXu4xXrAh2+/+NN3/4Z/8ZAzWgZ/3zV8HOiAK
|
|
||||||
ZtJvMZGtnYn8yBX8lZ73XBoIkt79QZ8Ikh7YQUnrZR8M+o7NAF+5EWD0TZ0HvuAR9pyxSeAENgXc
|
|
||||||
EY3K3Am9SeDY6WC7VcbdXcZKAB/XBaFIIBvVeMgJfiFljKFl0BrWWVbjsYsIPtvzcd1FnQyUAEHG
|
|
||||||
jJC/ieDIjV/HVUbsseFkiMjTlaEO+mAKoFwRbhywGSJSgKCQcY+tSWDBZeD26aAdQl8VSkWa+EHV
|
|
||||||
cN6jbCHzTQLK8KAL+qATxmCUTN/+sRspruHfEcQqVM3TyZ1lPIr4DRegmF8eDd5ejQmvTF+lFOIH
|
|
||||||
3gM4gIMX9qD+/R2h7jWgE3IcFYDF0q0hFFrA9AEfFVgGLhmgbXjIAi6dNBphAoEjFX5iUkzCuIlK
|
|
||||||
wxEi8LUKQ9RiMtZfxXFg211cqNCi8zHd06Ff13kI6nUdlABjkMwT9SCEGuTKB2Wis1Eb5wliLE5j
|
|
||||||
6SXi0g3kRHIc2BWdCVak63FdA1bjm8yTZY3jPfKe6zWhOkaFtEiUB3Kd3E3UD/pjP8Zg1KXeGepa
|
|
||||||
pfDjE7Lb01keENyJzVnJjXyQQa6d0lgAoUEK7T3h0/UiQ5DhM25iK94k9Rldw5njB3Zk7pkIQaCi
|
|
||||||
90zCo6CiAjLfxVnlD4KlJ65kU1ABB5piZRhDJqKkB+pbwUH+G7FJHeEt3STQorcx4NxJIgSAo5lM
|
|
||||||
i8Zgm7bZlSQuXmWEm0ElxEks2sV5m8NdJQpixi9aRq7l5bxN5aRcI8tVZstpyWa2YVNmUmAGSjcC
|
|
||||||
AMGJYWkCQMLtXGUkXTqypW3eJm7mpm7uZp65DjnhRJvhzVJSSHA6E060jOsYFnsUZ47xpnM+J3RG
|
|
||||||
p3ROJ3VWp3VeJ3Zmp3Zu54D4pnd+J3iGp3iOJ3mWp3nKpH8gp3muJ3u2p3uyJ3r2B3O+J33Wp32S
|
|
||||||
p4LA5n3uJ3/yZzc24374Grb0J4EWqHn+Z4GchIEuKIOCJzhooIBM4oD4GoDqB4UWyIUSCEcKyIYW
|
|
||||||
iIQKSIb+TqgI9keIciiE9keHEsiHBkiJsuiI8keLAkiK/seMRqjfeAEm5KiO7iiP9qiP/iiQBqmQ
|
|
||||||
DimR6mjIVWh+hOgNvAKTNqmTPimURqmUTimVVqmVXimT3sCRJqiuXUORfimYhqmYFqkXyM+JAoiE
|
|
||||||
ekIprCmbtqmbvimcxqmczimd1qmdruklbCmBhGgVTIGf/imgBqqgDiqhFqqhHiqiJqqfVoGeDkjR
|
|
||||||
3QM+3KmkTiqlVqqdeoKZ5qffqKmldqqnfuqc5qn3ICl+8KminiqqpqqqJiqjjiqXQk+kgqqszmqn
|
|
||||||
YqrvnOl/pCmt7iqv1qmo5hqp3oepriqxFquxGmqrAuv+q9pGrPaqsz5rKdjqmOCqf+gqtF7rrv5q
|
|
||||||
jP7HsB6rt37rqibrtvrHozYrtp6rp0prjQaIhNpAMrwrvMarvM4rvdarvd4rvuarvr7rAzQqiKrc
|
|
||||||
FoSDwA4swRaswR4swiaswi4swzaswG6BvwZI0RHCvlasxV4sxu6rDWRqgkioA7gDyIasyI4syZas
|
|
||||||
yZ4syqasyq4syL5AxAJIiBJDL8wszdaszd4szuaszu4sz/asz84sMbwsjeraPcwCyx4t0iat0q6s
|
|
||||||
A3Asgnjs0kat1E5tyrqsq+6pysnsz24t13at1/Zs0F6toxKt0VKt2Z5t1DbtrWrqQHws2r4t3Fat
|
|
||||||
0Pr+R8x+rd3eLd7ybNgqq4aSbdz+LeCGrNpOK9sKhNsGLuKirdXyrYjymdbmLeRG7tfu7biiqN8m
|
|
||||||
LuZS7eCuK5r6DQqUAOiGruiOLumWrumeLuqmruquLuh+wtySqMrRAhvMLu3Wru3eLu7mru7uLu/2
|
|
||||||
ru/OLi28Ln8UHQSwrvEeL/ImL+uigNMeiLWiK/RWqra+aICqXJ+CK/Zm76GKK/XqR7lGL/hOqrpS
|
|
||||||
a388b/ier5xOb7DaR7dqr/u+L/eub318L/rWL5yOb+HyAqfaL//iqfBWL59d7/sOcPbG77IGirn2
|
|
||||||
b/3ib8d6rvI+MARHcOq6rtj+K59RQw5ksAZvMAf+d7AHfzAIh7AIjzAJZzA1/K/36lrxSjALtzAE
|
|
||||||
M+/aNnDbZi4NR+3iVi6MZq3k7jAPgy0K58ejlm0NDzHLbi758gfUErESy20Fu6jj9jAURzHNUm73
|
|
||||||
AvHlLjEWk6wR5+/hZrEXu8MNV3Gp6rAUl/EOU7H80kcQfzEbb7EMGy4bf3EYp/F81K0Z33HeovEB
|
|
||||||
F20ce7EbP63fhIEJDDIhF7IhHzIiJ7IiLzIjN7IjD3If/PAY81nAOqwlXzImZzLDQmwTy6iuEcIj
|
|
||||||
h7IojzIpP3IYNK+BmK8Co6/6Yqj1EjAsg6sB9y2srjL/MjAgD8T+2vL5tjLWBnAsB7OxzvLY1jL+
|
|
||||||
L6MvLjvvph4zK0uysL6yMEdzqhKziRozM4NvMqfyMl8z+Ppy4w6EAEuzOG+vM9sH/XIz9Gazh/rN
|
|
||||||
NpCCO78zPMezPM8zPdezPd8zPuezO7NDOddHiD6CDAS0QA80QRe0QR80Qie0Qi80Qwf0I/SzGqsw
|
|
||||||
GegzRVe0RV90Pm8DKq/zDPcxFs+xKz8xHo/05EL0fKyxRy/xHytzR6c0EYP0Lw/E45I0TfusHtOy
|
|
||||||
bQixS9fwSmtzS+80DcP0NwvETNe0UefsTRdzTgP1EPc0RwvEKcyCVE81VVe1VV81Vme1Vm81V3e1
|
|
||||||
VC+BSctHiFKAKpS1WZ81Wqe1Wq81W7e1W7/+NVyXNQWEdXwUnQBkgFfntV7vNV939SlstIr6jSNk
|
|
||||||
AWEXtmEfNmIntmIvNmM3tmM/NmH7AF3DR4iKwxlcNmZntmZvNmd3tmd/NmiHtmhftjhM9nvYdTdA
|
|
||||||
tmqvNmu39mM7AmAPiCqj87V6swWD8zjnNrKatnucM21jqzoHti7/NrrathPjtm4nd6BSs8QSbQIT
|
|
||||||
t7MGt2xvM3RDq3HDLDQrt3Yztydbc3VHd2zb6ECgQBCUt3mfN3qnt3qvN3u3t3u/N3yXNwUz7m0L
|
|
||||||
xAxEAH7nt37vN3/3t3//N4AHuIAPOH7PAG+3B/GOQnwvOIM3uIPDNwwT7hvzQhczdeIKdX3+80JR
|
|
||||||
HzWHT/GBswdKWzjmOrVww7GIYy6GHzdRdziL12xSV/NSn3jikvh0/7SM/22KY7dItziLv3hzQ49O
|
|
||||||
33jc0rh4m7iQ4/iHr4cd83iH+3h3x/iRD3l4s6vfPEMYXDmWZ7mWbzmXd7mXfzmYh7mYX7kOJLl6
|
|
||||||
hGg1/IKarzmbt7mbvzmcx7mczzmd17maV4OZp8fEjjmf97mf//mYP8OUd+5wf/ezXje3Zrd2Jzd3
|
|
||||||
D613G/quSneR6y+kOyui062iL3puNzq5Onel96qkU3mhfzqtXjrsArOmM3qez4inkzqthjqhC8Qu
|
|
||||||
u/qnmnoOo3qqb/qqM1qr0zqownqusjP+Rg87sRf7PfNzJyc6nwF0Qze7sz87tC/0Qyd7pw8EBEy0
|
|
||||||
sWe7tg+7RsdwLht5lL9tjiu7TDN5j+86pl1xuKMtkYs6uK+72Y47pu+4uRu1kzs6lMO72bZ7rFO4
|
|
||||||
visuupfHktd7Td97tef7v0stvwf7QER1Xz88xEe8VoM1tZ/6QFRAXGe8xm88x8N1BQQ8edg1Xks8
|
|
||||||
yZf8w/+1t7O0QAy2a7e8y788Y0t2xd/6QFj2aN88zue8zod2ac/8fqA2zAe90Ls8bKe8T8u6r8uq
|
|
||||||
rQMwcuf6OHO65T560lcqsFcrdU+9pS69hWa60wsz1A9vr2M91Q86wyO92Gc9yI9H+3b+vdenvXj4
|
|
||||||
9tlLatWXr9/4wgHcPd7nvd7vPd/3vd//PeAHvuDfPTa4fXiEaDYggeIvPuM3vuM/PuRHvuRPPuVX
|
|
||||||
vuJng+GDB/EOPud3vud//uD7AtlbvY0n/NLKu8WvOMHbe+Z/R4ibftqOPt2XPuwjLerTvOqvPk0b
|
|
||||||
fNQjfO0j7cKT/rv//tHePtPnvu6PNO+DPZAT/9IG/+wPv/OrrPFvPb0n/x0v/8+r+/Qzrewjsd8k
|
|
||||||
AuiPP/mXP+AXvs9b/0Bog+W3v/u/P/xXvja0vndMrPnfP/6XfyJ8/37Mdtz7KkDwEngPwD2BBxEm
|
|
||||||
VLiQYUOHDyFGfEjQoMAqUzBm1Lj+kWNHjx9BhhQ5EmOVgxQlplS5kmVLgSkAnMRXimZNmzdx5tS5
|
|
||||||
k2dPnz9pejoI02VRo0ddAkhx0BNQp0+hRv156WRBpFexYkVpkWRXr1/BjjQ50GpWs2dVEh04U2pb
|
|
||||||
t295Cn0ZE21duxCVMoW7l69bqmQr3hVsdyuvi2ERJ1YMciyvwoMhZ1XrmG1fy5fjDqUbmfPZvAId
|
|
||||||
ZRE9mnRp06dRp1a9mnVr0T6qBu48u2VhcWdw59a9m3dv37+BBxc+HLe42LSRs5wsoJtr58+hR2/t
|
|
||||||
SHNy6y0/8zo1i3t379/Bhxc/nnx58+e5Lzl+nX3DwhVUxZc/n359+/fx59e/n3/+/Arr2wsQoeUy
|
|
||||||
QM/AAxFM8LxTqhPQQYWyc8CdCSms0MILMcxQww057NDDCV8A8MH2CiOmlxNRTFHFFVls0cUXYYxR
|
|
||||||
xhOJEXHE6ya7Z5YPeezRxx89dKDBGx+MEMgjkUySwxABI5LEsngxccYpqazSyhhrbNJJHDfTUckv
|
|
||||||
wURSyLm2dNDIMNFMc0kby+ysxCvhjFNOGLN0DMo2Z8txRzX57HPCMXmZDE/rsjvkhUMRTVTRRRlt
|
|
||||||
1NFHIY1U0kMNYXPQwQrLJpNNOe3U009BDVXUUUkt1dRNs7H00rsmg2CJSWGNVdZZJT1kyFVpy64p
|
|
||||||
zHjtlaa/7JQNV8EKO2yxY5H+Dauxx4ZltcvKfI2WL7kC3axZznSVVtu9gGX2WrSKTVbccUVa9s5v
|
|
||||||
0coR2m3ZfYpaQdEVLNt26XWq23PjzSpccvnttyRV8z1K3XoJ9uldawOua96CGcbpXmETRmpffylO
|
|
||||||
1lyIIzZq4IY5rungjO3K7pkwSC7Z5JNRTlnllVlu2eWXSdYBYJBXKqyaX3DOWeedee7Z55+BDlro
|
|
||||||
oXGuZmaaU5qMEJiZbtrpp2F+5lakrzrTz6vDZDJYqo96c86vwYazTm+5TqvLPbFOO0lA4S27KKvV
|
|
||||||
jttHrcl2OyKvw85b7xfHxtfuiPSUW/Ae2Ub4b5bgHlzxDOn2+3CH8N5b8sn++8b48YYCX1xzDAu/
|
|
||||||
PKmlBJJw89EpbNxyzxWKfPLVw64cdcDPJl32zl9XKbsmlMld9915793334EPXvjhidf96NoLE0GK
|
|
||||||
5Zlv3vnnoY9e+umpr9765UU4/vXJrine++/BD7/4Jqau/aHszF+o7vS3Zl99x9lv230y53cI/frb
|
|
||||||
x19L/fPXX/75/6e/+9VvfekroPkOWLsAxs9w/OMFAMBhDAlOkIIVtOAFMZhBDW6Qgx3UIBXgZ0AA
|
|
||||||
UMGDJTThCVGYQgmC8HTpg4kKYRhDGZoQHA3k3wxxmEMdTlANDuSFGnYYRCGisIcOtMAQkZjEDPqQ
|
|
||||||
iU104hOhGEUpTpGKVbT+4hWxmEUtbpGLXfTiF8EYRjGOkYxlNOMZ0ZhGNa6RjW104xvhGEc5zpGO
|
|
||||||
dbTjHfGYRz3ukY999OMfARlIQQ6SkIU05CERyQsgrAIh1wBAEV9ykBBCDgCVtKSdBGJJTWZSWASx
|
|
||||||
JDj8QMlMGgMhBHmgJitJSlRWMpOaBCVZGAKERybkHsaoJBCK6ElNGkSXEAwlQ2Cyynv08pUKUQMj
|
|
||||||
z9fChFhlkispyBOM8YRETvMufqgDQiYBjgFt5lxPWEUdRgjJ1BnOlA/E2LnKyQsL1OGX72vlJKqC
|
|
||||||
kDv5DUopqIM004mQJ1QSdAJRAwDg+QR74rOB6VxnOxmSz3TCRJoJMYb+OIF5jZRYJQUSzYpVLIBM
|
|
||||||
am7ULOw8CBX6eQ9wSlJYq6CCRL/Z0HGu1JwLQae1UqDNhNIFAMa4JyxJKs9zysYq+TxINrOJEGP0
|
|
||||||
kxdUsAAmWfoSmbrHWvk8lxqWelFlJsUgT6iDRTma1aOsApn7LOITwDEJbgorBYFxnE+RSs9OWsuR
|
|
||||||
WKUlTe9BBSDglJM6dSlPe4jWolZ0lrzwKkLUIFG95rOtooynJN0aKNAZwwI1NCoI63BUq6gBsqCj
|
|
||||||
LD/rapUnyDKypFRDCuz5GW9WchXSHG0dYFKRVcBTq611iTUFYgEqDKWsY2VqYg9bSrje9a3LtFw5
|
|
||||||
C/LPUDqVpzsdCjL+0erIHoKUrr1Nal2ZqlvaKsQYrB0hSvNiz5ailhfXqINBqvtDZhrEKsYAwhOe
|
|
||||||
AELH1IGRfpilMUq7WUbG9BqjrcgkSOla/a7Eo0BgbVyR2tKFrJO179tlWlGZ35f6dqZ1HShx5Zng
|
|
||||||
VmoSdGidxGx5MYlrBvitqGyugBtcFVQe1a4P/GU5TWkV9uK2u+M1Z2ExSZCGFsSRDf0nLyIrEEdW
|
|
||||||
RK/79fFCUlBaAEjUqry0LS3BAY4WohW4xpXuQWDM0rJQYRUQzimEAmOBIXNYICDUZCiVW8qjDpat
|
|
||||||
W45ubr254SuXBcUxsco1VgGOOuBSnVQAhyzJm+d0OjLABeklK6H+xGYb/pjQ/owshv+cF3TWocBn
|
|
||||||
frJanavUM5fln4Kap5Pr6tMoU1kgQ0UIEJZC5gFF1Z255XJZBA3LOwm0Dv8soouDa2ZTppPGhgMH
|
|
||||||
iXc8EDUXmtcISXKj6XouKgA7xI/GNF0POunABLPE0GVwTn2aAgwLRMNkmYQ0NSzYgm4m2Yalqzfn
|
|
||||||
KlTr8pguKTYIdwMFDldnGAChdLF50ateWoM3vqsgJX3t+5L89prf1cItrT0szGIfdpXM9DAxESpl
|
|
||||||
2aj3yhM+8J3AEWpUxrTRjjyxl+lsp4lrvJLF9DbHb6nSlyAz1Zi0ih8w3sPQDhWgLoYmBFcRk3n7
|
|
||||||
VZYAOO9clJL+giL6t98997lDrkHqutyjoSJFilVF/nOl/7zKg4k4zTVaFNAuneorOaIFSSwYIFqQ
|
|
||||||
qFy7egWz3pJrdB0tQCRt0lsS9aqvne1td/vb4R53uc+d7nW3+93xnne9F1KJffd72PG3db8PXogQ
|
|
||||||
rZ/gCZ94HEIRgop3PAwHOD+CkPDxlS8hC304ectvnoM1ZDzZ6xd59yXwdaRHnek9t8DQg35+omcf
|
|
||||||
6i8H+8fJ/nCqbz3r3ed6EU619M3sPe9RZ/vc91MSrzD+8ZGffOUvn/nNd/7zoR/942NV9wiEEiaw
|
|
||||||
n33tb5/73ff+98EffvGPX/vaOz2UpJ9+9a+f/dK/QfkcmJ3+YlSM/scCg1lxv3u9dKxj1KL93wqD
|
|
||||||
DepvABGjMYSPfeSPABXQK+5PkvLP+gJjV/ivYfzP984vMARwATUwJAxw0PAnATcwBDuiATPpAZEH
|
|
||||||
SiRwAgumAoHPcwJQBGFQIzrw8w5i/mIwBknwgUzw9/ZPBVfQ/FwQSjLwBkVwBp8oO7qgB5RwCZmw
|
|
||||||
CZ3wCaEwCqVwCqmwCpeQEBww86DkAtqhC73wC8EwDMVwDMmwDM3wDNGwCy8ACGMPSpDBCuEwDuVw
|
|
||||||
DquQEuCPf7IjH2SHdGYB/7QwMKSEdQTxa1zHgQrjBfZwdGjHifIwETenD7PQEKEkEAexEq+kEPnn
|
|
||||||
EB1Rcxb+sYkacRMVBxJL8A8PghIt8RRnBBP1RxNBcXA6kYk+sRXlRhR1kBQFwhRRMRddRBXxhxVl
|
|
||||||
MW5e0YeyIw9EoRiN8RiRMRmVcRmZsRmd8RmhsRgFAQIiMROhpACAIRu1cRu5sRu98RvBMRzFcRzJ
|
|
||||||
MRsLgA1nD0o0IBrZsR3d8R2hUQPuUID6yQaJMARzsPpOMAJ9kGFY0BZ5YQjvUQONkBHrcSDx0Q8l
|
|
||||||
kR/7kWD+cSEPQiARkgAL0hMPciIXMB938AJ7sCHb5SGtEQMxcgErEhb7aQOIIyVVciVZcjjgQACq
|
|
||||||
cRWhBBSkoyZt8iZXAxTQ8XAK4w5a8ieBMiiDwzjoxyD+D6ISFCQplXIpyyMDYHIUIVIgKKA/qLIq
|
|
||||||
rfIq+YMCdhIAoWQJmPIrwVIpGWAeP7Cf9PAX44YW9ZEHb1EX3ZJvttJufBEtsSYY488s6VJt1HIj
|
|
||||||
gxAQ3/IvV4QXCQhKEDEv65IsV+8gztIw/WQvARIXAdMtBVPyCJMxr8Yu8bCfuqADOLMzPfMzQTM0
|
|
||||||
RXM0SbM0TfM0OTMXqBEqQ/IgeGAcYDM2ZXM2abM2bfM2cTM3dXM3YZMH4tJtCoMTUHM4ibM4jfM0
|
|
||||||
3QAxb68GR1IBNRIgU9AjtwUkZVIkm3MAS1IYL/I66e85o5IXolM6pYU6e1EIubP+svMumfM8K8Y7
|
|
||||||
W1P+IMJTPH2FPAfTOtnTX9IzM9fzPvvFPauzI+UzWuiTMu2TP8klP+nxIIbgOBm0QR3UNLGQNf9T
|
|
||||||
IKCBNy30QjE0Q3cTGn6zbAojFx40REW0QZlAOYdPMS2zMRXyPaMkMl10MkevMlOUTzAzQQViMWcU
|
|
||||||
TRzzOyHTRVERRl9PRnMUTWq0LFF0SHV0RSe0RX30L4FU/wSiMJEUTIo0MW90SsNkR1m0R5u0Ep8U
|
|
||||||
Ag9CSrF0bUwUAftpDyQgTdV0Tdm0Td30TeE0TuV0Tuk0TRFhNWvxO3VhBfi0T/30TwE1UAV1UAm1
|
|
||||||
UA31UPlUFzqUawpDEer0USE1UiWVTuWxKC1yPw3+dFz8szwZMkDHc1Gp5gUz9UDLNH1AcFTFZVPr
|
|
||||||
E0A9lVcGNEYLFFWPBUGNVCDsUVbtT0k5lVVb9TJeNUhjFVcTg1atlBfQdFKRNVmVNU7vNCZ3VSD2
|
|
||||||
FFGldVqptVoNVVH3Z0kddVm5tVuRtVKrhQavdEyVREuXlEu7VBC/dB/DlFyVpEqXc1zd9UjM9VmZ
|
|
||||||
NF1zcV3ZkhfEdF59BF5PVF791UfqdVXbEl/zFVSRZi4HlkcA1kyPtGF7pGAJtBQRNmGz1V77VWI7
|
|
||||||
5GFNtZ8WdERFdmQh1FkNlhcqVENVdmVZFjc5NGNPFkRJdmZpljNL1FJNElOFNTFUtWLhs1cFVGH+
|
|
||||||
aUZUd1YxiDVeeeFWizYsehZWeRVop0VoQYZol1ZZStV8TrVqwaJpgfVpoRYufhVKA1JrC/Bqaydr
|
|
||||||
ybYruFZs4/NrwVZqM4Zq05YkjjZgeeEcYiFv9XZv+bZv/fZvATdwBXdwCTdvyQBP15IjBYIHkqBx
|
|
||||||
HfdxITdyJXdyKbdyLfdyMbdxfRNmfZYX2KFwQTd0RXd0CTc5cVY7I5ZjPYRinfZgL9YS9VVx+VV1
|
|
||||||
HdZsXycWaZdDWLdrXfd1BzF2+7Jdc7djbRd1cHd4M2R3xRZdfTdvgLcNA2NjkddCPBZr+wkpwzJ7
|
|
||||||
tbcpnzJPWXQqsTJ8xXd880MrObd1ecErt3f+fdmXO8bydNVTIFBSKOm3fn/yJU22c2kSJ/m3f2tS
|
|
||||||
J8+Xd3nBJ+23gA14KIvXc9B2bkVibcH0Z93WV+E2YuSWgTkwgS9ngS34IxyYXSE4gvsibB94bDdY
|
|
||||||
LDD4cTS4hDmig/e1bUFYKkTYg0lYhRnjhA9nGOExh3V4h51xGvMXfbGxHIV4iIm4iMfxHANYbNeR
|
|
||||||
h5m4iXMYXA/wY1N3ei9EeUeYeZsXbJ43HaOXijWkes8WL70YQ6xYhrE4i+dki3lSSMe4QsD4dsW4
|
|
||||||
jSukjPf1jNE4TtSYK7tYjt3Yhv/meOWYjmXXju/4Eic4YRhWjt/YeDWTDh35kSGZCiPUe5f+lAvT
|
|
||||||
8JIxOZM1+QzXMIlH+A0jOZRF2ZHtEH7101ZpOCRYWHZd+IWhIob3VSJTeSPqFmJReZY9YpWD94Nd
|
|
||||||
+S1gWXZlGZf/xZRtNGmFeQR19WRbuZeB4pd3eYaPOSNqWYpvOZozQpeh12uZuZkPOWAq+Jin2XoP
|
|
||||||
Am9Jt5zN+ZwD93B/WIAZN3Pd+Z3hOZ4vd3P7x14/F53xOZ/L2XTD9QjjmI/dQZCfmZALuUryWC7Z
|
|
||||||
mI8XWYH/mY8FOpt7t6Cdt5vzJZHbeKEzuKEDOZk7l6AlOhUpOl4seowxGoX7aRDaN6W11ynXWWwN
|
|
||||||
gHxhOqbF1wBCGl0KQ31VOqeXcgf82G7+smN+DziohfoM8FdC7XV//TeplVo1ALieT5aAhzqq7Zco
|
|
||||||
+9koq9mapwCbuVibt9lgavpbvlmYwzmMdTaatXqNO7Wro8KZIRqarXms4bisj/ms9Zir1Xon2Hqr
|
|
||||||
BSKYxbqn3QYJPSCwBXuwCbuwDfuwETuxFXuxGVuwEZcv25oZYGCyKbuyLfuyMTuzNXuzObuzPXuy
|
|
||||||
meGrr6UwhKCxTfu0UTu1GRsQ/LpsALmNH1qv7/WjW0e0m2Wkvbikb1ijYZuj0dejaZtObHtYcJuK
|
|
||||||
dfuPeXuMYxutLTa4a9uTZVh6Sbq1uea1ldu3BRi4nbtFDho4E1qRqZtqskMZ8qG8zfv+vNE7vdV7
|
|
||||||
vdm7vd37veHbvCEpcZ/ZBVrgvvE7v/V7v/m7v/37vwE8wAX8vl1guHGlMCohvhV8wRm8weE7CsIb
|
|
||||||
aeiboQFySS0cf6JYnFH3Oy/8ZP3HA4v1lFm0wzv3wxkvgjgvxTFowtOR8lT8xVfIAoPQxWFcxT3v
|
|
||||||
iWo8xyUI8A5Px3Pc8OYH8Xw8xfeuyI38yJE8yZV8yZm8yZ38yaE8yqV8yqm8yq38yrE8y7V8y7m8
|
|
||||||
y738y8E8zMV8zMm8zM38zNEcInLsINZJnyoMxO1HwoBLzsnJlRIuIVgNANhrxlYJyr4JglIA7UTM
|
|
||||||
koDgGhKNxdP8y1Mg3ARikbbpw37+qOZujiHwpcmeC9k8iiFMSqKuAQgUDGO8axUkirKmLamugYSa
|
|
||||||
LdFVHbAAoKH2qZ2sqdxsLb5QndIhxtIjzdRiqiGgJMz8xrz0KawGzr1SfdWN/dYEArZ07NZknbqK
|
|
||||||
btAqfbdyvbmiLCH2/CSkCV/+CptK/cmSfd9AzNiNfdEFYhX6qbrazCF23dYV7tJPzXLWaYR0ruFM
|
|
||||||
DdLpauxETsbFHcz/SZpa7SXmKt0XgtVOp88RjMK47N0hR9oAgOTo3N3JYsSKfd8T3aj8QKZEiqDs
|
|
||||||
XcOMgcXoHaei/bmqvSHcq4e0va9+Sui+7ZsmnuLRfBIWCXSCaZfQKqamKuTDHdL+82ndXSrf82wh
|
|
||||||
gL3T7uHpSq259N3lu9yR1I2lfGrbk6ndpz3Aug3oO96vTMrZGmnF2O2mih7cWh7pzdzOSu3PjCHR
|
|
||||||
eP3WaarPyR7kPG7g/1zrTwmVKgLOwKmmkN3ACN3nwX7v9UcNiI3vAT/wBf+OUuCCgPwsvo6CeLwo
|
|
||||||
MGjwHf/xIT/yJX/yKb/yLf/yMT/zNZ8zQKvzPf/zQT/0RX/0Sb/0Tf/0Ub+ifGjsUr/1Xf/1YR/2
|
|
||||||
Pf71Yr/2bf/2YZ/xCm73eb/3ff/3gT/4hV/utXD4jf/4kT/5g78FL2fmlf/5oT/6f19cR9xeSdx9
|
|
||||||
Mrz54dxur1+Au9+Ftn97wp/+mqvfw60fw8c/9dKfrAViAsrh/eE//uV//um//u3//vE///Uf/g18
|
|
||||||
VQojEgBCmsCBBAsaPIgwocKFDBsKjMQr4j0A9yJavIgxo8aNHDt6/AjSYwoAFp+UO4kypcqVLFu6
|
|
||||||
fAkzpkyUEyyODIkzp86dPDUCSGHRwayhRIsaPYo0qdKlTJs6HbrE4sSKPatavRpyqkVuqrp6/Qo2
|
|
||||||
rNixZMuaPYu2KzepFLG6ffv2psQMT+vavYvXqQObJOH6/Vv1Z1B3hAsbPow4seLFjBs7fkz4BVuq
|
|
||||||
gCtbzqg1IrFenDt7/gw6tOjRpEubPs2Z2OTLrFnL5XVvFuTZtGvbfrw34uv+1rwtC47o4Lbw4cQb
|
|
||||||
S5bYtrdyt5l5bUYNPbr06aZVI6e8PDvP17GLe/8+PDev3drL8/zNKzj49eyNrzYPH2Tz59Tr278/
|
|
||||||
2jrs5PH7b+QuW3sCDkiYeOT5h2BG6O1gSoMOPghhhBJOSGGFFl6IYYMIvJdgh83Vs0uIIo5IYokm
|
|
||||||
nohiiiquyGKI9XDYIYKvEZJhjTbeiGOGO/AVY48WoacegUKCd9x+2PkI33z4Lcmkffo1hyR8AA5J
|
|
||||||
pXcG9hVlgkBWyaVwRUKZpXZKNklmmaU9yV+Y2k3ZZZuzXakmglu6Sad718VZ3phm7slnL2geiSdv
|
|
||||||
bNZJKGJwBgrfnIUuGhn+jIi2pmefkjL556PKDcpooYdamh16wuQIaqiiWsiJo5xW1pwsi6zKaquu
|
|
||||||
vgprrLLOSmuttq4qi6mn/vUaBAiMCmywoQrD467KKZopoV+maexfkU4KbX2VNlsZpsnSuSm1lyF7
|
|
||||||
rZvLAqotVs9GSy5004YLl7Xddpktun9xuy6X37oL17jl3kvaufRepW68VLa7r1vonZJXwQYfzFRU
|
|
||||||
dwZ8VXNxyAFxxBJPTHHFFl+MccYabwxxHLoynNNrAtCFcMkmF3xKsSALDFRElrwBc8wyz0xzzTbf
|
|
||||||
jHPOOu8MsyYfrywffxSkRXTRRh+NFgU/Ay0SlgLQw3PUUk9N9c6WqMz+dGAtp+evt0tnvZG9+I79
|
|
||||||
mb5gg9Rv1wQCfDZO8KpN4LxtZ8UffWTfXfbXc6vcHdxVsr23R2/73Z7cgXckNt5jm314RmkTvh7g
|
|
||||||
jfu0dRFmXI555ppvznnnnn8OeuiiX86O3oE390gAqq/Oeuuuvw577LLPTnvtqj9i+t69cjF6777/
|
|
||||||
DrzoRWA9eUeDQ05k7nMnrvi9jBevG5Z9Iz+g5ND/uHWQ1BeufNvMN0/u89A/vj1x1l/Py/HlD2c4
|
|
||||||
+gs7B37z4hdP/vq3nX+9+vbb1r7738c/qflNrn77ow3+oIceEsxhgQxsoAMfCMEISnCCFKygBRdo
|
|
||||||
j+6drTlYmIYHPwj+whCKcIQkLKEJT4jCFHoQCxoE24wuCMMYynCGFyQB8dx3Ef0VcDb9Q9//ANgn
|
|
||||||
ATaOgDvEzQ1xGBEdFtExPbzeD4G4JyEejohLZMwBi6fEKi6midB7IhTLJMXAUVGLibni5LJIRsRw
|
|
||||||
sXhe/GKTwqg76QUojbUxY+PQA4Vg6HGPfOyjH/8IyEAKcpCELKQeR9DCrKXqCIxspCMfCclISnKS
|
|
||||||
lKykJS/JyFy9D4e9UoIhPwnKUIqykFA4IhLRSMfCrHFybXTjkuA4tzGmskCmxCEqZ7nKxrXSlfeB
|
|
||||||
ZdtkOUs7Hu6Wqczl4XbJS2klkmnATKUwAzewk0lzmk1RmJGQ+L7+h3Fsm9zspjc15rFNuk9kJKOm
|
|
||||||
Oc85i5RFD5sK2trLqgbPeMoTZz4Tpw+FhrR86nOfZlGaPa8nMqjNc6AEhefV1snOHGZvlrQx5unq
|
|
||||||
lszwLRNozaTjM/dGTDo6dG/IjKh0fHm2iqbxonPLaBo3ujyIejSAE12ZSMlI0rahJxEmqKlNb4rT
|
|
||||||
nOp0pzztqU9/CtSaluqfXeQPC8KB1KQqdalMbapTnwrVqEp1qkhlQUtB1qs+BHWrXO2qV4GaiFq6
|
|
||||||
Dz2eKIVZz4rWtKp1rWxtq1vfCte4mvUSV2VYc6owhbzqda987atf/wrYwAp2sITNaxXqGjDu4EOu
|
|
||||||
jG2sYx8bV0/+iBV9ZIWsZS+L2bfSlahs5A9eCwva0Ip2tIM9LGcHKL3FZna1rLWsZBGa0CRurayt
|
|
||||||
ra1tNYvYfd2VtLztrW8Fa9prYlOxty2ucc/62vFgKbaVPa5za7tZ4SJxt7+trnV5G1wwoY+4z+1u
|
|
||||||
ZpN7IGyihxEgKK95z4ve9Kp3vextr3vfC9/yLiO39GqOOtKB3/zqd7/87a9//wvgAAt4wPhVB33d
|
|
||||||
NaP4KnjBDG5wfBkx2fzN1rsUtmx0tetEz153wxwu7YHRxd0Ki1iu4F1uQps74hS79cLMuidlPtvh
|
|
||||||
GMt4CtltMUBTq+Ics7XEscWeRWir4yDP9cPhou6Mj3zdGoP+a3w4FrKQedzj9E3YyUFm8ZI7+2Ik
|
|
||||||
a7m6SmZniKmsYij3GD0JmIeZz4zmNKt5zWxus5vfDOc4mxkHRNZWc+yAhzzrec987rOf/wzoQAt6
|
|
||||||
0ITOsx3qTK1epULOjG60ox8d5wREGIFTBrOKrcxOI29506Lt8nCbbOkUi5m5lQ61iDGNTU1zetUe
|
|
||||||
Pu0QQW3qCo/6xKWOtXdRPV0Ns3rXwEV0s75s6+7Omp1khrSxj43sN9PZ1cfkTzzYAO1oS3va1K62
|
|
||||||
ta+N7Wxre9vQjoevjaXoZIt73MeWNGxJ/eNgVxjXOFQ1r9+tV08jEdjqPu6wxVvrehuX3f7TNbz/
|
|
||||||
bdhv74r+3vq+7b1Pme+C25bfLrYIjAEOb3lzEtYKN/iksZjwirOW4RnOMsT/LfFxUlzjrT24LbdG
|
|
||||||
XgerfOUsb+98mf1QyqAjDTSvuc1vjvOc63znPO+5z39Oc3QI/FQJbrnRj75yCJ+b1ukm+W05XlSP
|
|
||||||
f/zdId/uyJ3+3YufMeNYt/DQOeXuqXO66jeWimq7zlqTj5XraHcs1LHscLFT/euWInjbH6t2yrL9
|
|
||||||
7nJ9Oyv9LfdVk53JZud71pdO7K1xgACMb7zjHw/5yEt+8pSvvOUvz/ha0P1RzXkHOj4P+tCLfvSk
|
|
||||||
L73pT4/61Kv+8+/YPKJ69QfMy372tK/95Tmg9Tvu3fD+uIU5RwEf+E0Pnn5X5z2Jcz/M3RufrX7X
|
|
||||||
JfCDr+Xho7bwy8c78qGp/OqntfnNljr0tyz9V1Nf+4zNu4QtogB8qH/97G+/+98P//jLf/70r7/6
|
|
||||||
C+H6QDXHG2Dov///D4ABKIADSIAFaIAHiID95w35hyciwwr2B4ERKIETWH8KcH0YtTWOkAUbyIEd
|
|
||||||
6IEfCIIhKIIjSIIlaIIb6AMMGCfNIQ5n4IIvCIMxKIMzSIM1aIM3iIM56ILioIJqIjLdcIJBKIRD
|
|
||||||
SIQm6AgXWFLZR35D5nsp5X3fh2ThN0XFt4RrZX6U1nRVCFfcF3NxB4Xg14NhYndamFZXiHFZSIZt
|
|
||||||
xYX+v/eEXyhjUihGVJiGZmWGW2cRw9AGeaiHe8iHfeiHfwiIgSiIg0iIeUgHYZglzQEPZcCIjeiI
|
|
||||||
jwiJkSiJk0iJlWiJl8iI8ICIUdIrD1CInwiKoSiKhDgMSChTSriEa+iEXuiGRwaHcTR+c2iFpng2
|
|
||||||
KCaLaqWK3vN8rchhrxhLcjiHdah7aHiLaJWLG7SLvJhkm4gkYyiLwph8xFiMTChd7ZaMyshlzOgj
|
|
||||||
zhiMtAg26PEBkCCO40iO5WiO54iO6aiO68iO7SiOGKCNPdIcRlAM9WiP94iP+aiP+8iP/eiP/wiQ
|
|
||||||
9WgE8Rgjr6EG7oiQCamQC+mOH+CNWYMe1nhlfzeTkc5XkVOYUOGFcJlmY1HHkRcZhxlpYon3kSWZ
|
|
||||||
ah1JfCIZZeljDCngki8JkzEpkzNJkzVpkzeJkzlpk6uAkn+3CjoJlEEplENJlC7JkyAZR0WplEvJ
|
|
||||||
lEFpDCMpXgAglVNJlVVplVeJlVmplVvJlV3ZlUiZUl4plmNJlmVpllUJlr90lmvJlm1plisJl3Ep
|
|
||||||
l3O5NwEBADs=
|
|
||||||
@@ -1,445 +0,0 @@
|
|||||||
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
|
|
||||||
kh6JXympkivJkm4TEAA7
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
R0lGODlhFgFnAMZnAAAAAAYCAgAASAwFBQAAdEgAACQODkgASCoQEEgAdHQAADATEjUVFHQASDsX
|
|
||||||
F3QAdE0eHVMhIABISABInEhIAIM0Mok2NI84Nk9PT5o9O5xIAHRInFlZWaxEQbhJRgB0v75LSLhQ
|
|
||||||
TbRTUcBRTrBXVatcWsJWVKdfXW9vb6VhX0h0v8RcWZhpaJJubpBwb8ZiX8ZiYI5zc4t1dYd4eMhn
|
|
||||||
Zb90AIN8fH9/f8pracpta8ttasxzcM51dM52dM53dc94dkic39F+fNOEgpmZmdWJh9ePjdiTkt+c
|
|
||||||
SNuamd2gnt6lo3S//5y/nOCqqeKwr+S1tOa7uv+/dOjBwOrGxuzKye3KyuzMy5zf/7/fnO/S0fHX
|
|
||||||
1//fnPPd3fTe3vXj4vfo6Pnu7r////v09N////35+f//v///3///////////////////////////
|
|
||||||
/////////////////////////////////////////////////////////////////////////yH+
|
|
||||||
FE5WMTJNVCBtZW1vcnkgbGF5b3V0ACwAAAAAFgFnAAAH/oBngoOEhYaHiImKi4yNjo+QkZKTlJWW
|
|
||||||
l5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGmkM3ysvMzc7P
|
|
||||||
0NHS0CjT1tfY19XZ3N3Y297h4sxDlQDj6OLn6ezZ6+3w0u/x9M0A5r/3vvq9/Lz+kQDqEpiLIC6D
|
|
||||||
txAyUliLIS2HsyDKkniIIiyLrzC60tiKoyCPq0CqEpmKJCqQJk+lNLWyVEtSKPPJ3Ddz0stRN0Xl
|
|
||||||
DLUTVEyaQPvVlNTzU1FPRzsl5fRTaNB/QwNGHTi1IL6nu5Zu0qqpKVSsVME+4pqJLCazl9Ba8oqp
|
|
||||||
jAIA/gTCIOXkVsAVo52OAABgV6kmMxr2Cgbil9LLGh/OIJ6r6QgBLAfuMm48YYzPT1siF7a5qUyD
|
|
||||||
u1HibtaUWfLoS55NT+a0+DSklqXPxK5EJkuhm7NdV8pMYW9i3YJsT8q99Wqm2MQn/cihZRBuzasv
|
|
||||||
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
|
|
||||||
@@ -1,121 +0,0 @@
|
|||||||
R0lGODlhoAHkAOe1AAAAAAAASAAAdEgAAEgASEgAdBgYGHQAABoaGnQASHQAdC0eHigoKEIlJEYm
|
|
||||||
JS4uLlssKzY2NgBISFIyMQBInEBAQEhBQUhIAFBBQVhCQkhISF5DQ2NDQmdDQ3NEQ05OToNGRHhJ
|
|
||||||
SJxIAItHRY9HRXRInJdIRlpaWppLSaJJRqpJR7BIRa5KR2NfX7JKR2BgYGxdXWleXmZfX31ZWXJc
|
|
||||||
XHpaWQB0v29dXLZKSHhbWolXVpVUU5JVU55SUJhUUqdQTrpLSK9OTKRRT6FSULRNS7hMSrVNSr5L
|
|
||||||
SL9MSr1OS7xQTsBRTrtTUL5WU7lYVsJWVEh0v7deW4pqab5dW8RcWbdgXrZjYcZgXnd3d8ZiX8Zi
|
|
||||||
YL9lY7RoZshnZb90ALJubLFwb8prabBzccpta79wbsttaqx6ecxzcKt8e4aGhr93dc10cs51dM52
|
|
||||||
dImJib97ec53dc94dqiEhKeHhkic39F+fKeKiaWPj9OEgqSSkb6PjtWJh5qamqGamqCcnNePjZ+f
|
|
||||||
n9iTkr6amtiUktmVk9+cSL6enduamb+jo92gnr+pqd6lo7Ozs7+wsHS//7W1tZy/nOCqqbm5ub+4
|
|
||||||
uOKwr+S1tL+/v9+/dOa7uv+/dOjBwOrGxuzKye3KyuzMy5zf/7/fnO/S0d/fnPHX1+Dg4P/fnPPd
|
|
||||||
3fTe3vXj4vfo6L//v+/v7/nu7r///9//v/v09N//39////35+f//v///3///////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
|
||||||
/////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBH
|
|
||||||
SU1QACwAAAAAoAHkAAAI/gBrCRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJ
|
|
||||||
sqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtapV
|
|
||||||
h6QkWdrKtavXr2DDih0rlpFWsmjTqkVrdq3bt27bwp1L16vcunjn3s3LNy2jVRU/MKhAuLDhw4gT
|
|
||||||
K17MeDGCwY0jS54c+THly5gvW87MufPhzZ5DcwYturRkBGkqvgAEdPVP169Z+4Q9W3ZP2hJx89St
|
|
||||||
k3dv27uBB4+tWvhO3ziRJzeeU/lN5zWhK5ROk7pM69eZL2+t/Xl3hthj/oZ/OZ789+jn0ROnWN5l
|
|
||||||
e5bv4aefGX9l/ZTx7+Ofn537+tr/5cZffwAGeNyA4iFoXnH+FejgcAb+xmCEzSm44IMQ3mbhQPqh
|
|
||||||
1KFJH4K4oXwNajghhhJSuJ2K3p1oIoopvgjjihOFWJKNI+GY44j28dgji+D5qJKOIRFZpJAeIpkk
|
|
||||||
kAvZOMsBAAjQykdOHhDAJ1QqSVAhAABwpUcf0iJCl2TS0ZGNmZDpSJYcpekllmfyaKMXNtRCZ0av
|
|
||||||
jEJQiIUIAAoBcMbJUSEUxHJkQa+wglEpgGKUJ4da1vLkmn1OiZEsoUC6USkDrJmJlIKyF+ksCWD5
|
|
||||||
qaUWydJFHagIhCOj/oFyFCKpsYIp3CZPRCKLRXdeumqrs5Zay6kaxTGGniESS2uoNUYKay3PZhQJ
|
|
||||||
FYnI8mqjtm5KwAVd1pltQangkYUnFEUrLbUtRGqnAKocsOZGmlDxRwyRZvLlpMwKqC2W5mLEyh5U
|
|
||||||
zKAutNjme5G9WOJr8ECerJqKRIQautG/RsjRkRcAFNrRK4kUYQZHGHt5wbsb5edso/1mFEoQVrS6
|
|
||||||
L5saEWunt7J+N221DyncUQ5OsJrRk2Z6AWpHN1RxbEc6a2TyRsvKjJAncUQt9dRUT/3DEUgcofXW
|
|
||||||
XHc9CEMpK30ylmKaaRAebFSt9to/VLG21F0cQYUmDkXMENRvs13F/hFLXNH131wvgpCy7t6dt9pt
|
|
||||||
L3HEH20ADrgWuyrktNguXlT2zAulEsrmnHfueec6KNEFuQt5QoUpYBdc80aXh11LJ2Vw8vnss+dg
|
|
||||||
B+2cH3IEHg8zBHRDmuNOew5mPDE6RggTXOtBwQvveQ5oUDFGpnefvtCTNJcsp7qcRomqRq8Q4nFD
|
|
||||||
pqMuOZlvLmxR9wCQbJApcbzSbEKoGEt9Q5V+9IoPSlCyEZddch/4dsCESjikfAl5UrdgNj+eUOIJ
|
|
||||||
h5BBehB4oZTAT34R8c0rDvEEA8bkgTvog09AKELyWa8lS9NJw3wGHQpW0ILxy6BxHngIDL5khagw
|
|
||||||
EkdwSB0XkkhU/jpBxRhIVwvn+NA9A4PIBSGiG0z4LCZCJJ0OwVcHKU7whEis3IEScsQstmSJDpmi
|
|
||||||
+ipUOix6sYEz6uIZWQLGIDFJPVw04xplWCKCqHGOK2njdJJ4KBbd8UdAjNAfUchHiegRIWJcnYoG
|
|
||||||
OaTt1bEWjPwhTA5pkERq75ECieR+tBgjSMqRPoWcCCX3FMpvoUiTmwykg1AJSJmM0lWlHCONMvnJ
|
|
||||||
BHHyJtWCDStb6coYHsSSlPsJD/xgx1raUpU6ecUTisiaXfKylzYk5Rtn8ooi2MaZS0JmTjaBB2Zi
|
|
||||||
s5E3McUaeifNGd1kE0OQzTdPEp8TYKEv8ByLGvRgCQ1IoQmK/oinPr+igXfuE56IOMIU3iCISWyl
|
|
||||||
n/9M6EH9qdB9qiEE7zQEPhsKTw3woSIagIxpNqoYFmCgAg5YQQY4StLEGECjJTUNDo5AAhMAIQUg
|
|
||||||
aABKU1rSk9L0pixYAAM44IKR3pSjBkiNNm+SiixA0gh3mCZL8AAw1I0iEj9Igv9ktJOivmAOxoQj
|
|
||||||
GnNSiT+YjgaykUU0W4QTTHj1hC/ww1jJ2JOu1oAJ5quFWNm6VZww9XQvsMMizrCESGwRJ0X1JOqA
|
|
||||||
mRHCXoSpSK1FKPbaV7rqaydPOMIe6nCEKCzifp20SRYeVj7DXsSzFYlsD6xwhDNc9q91tckojjCG
|
|
||||||
Q3giXUpl/skfPPjVWCpyJ6sdww7mELkMPRYnsgiEomAZ25Vwk2GJNedMgqso0N6yIc51iCzwQERm
|
|
||||||
FlclyiTIW+OKWuBSl7jKbZJtKTLd6lo3vDDBmauwyl3H2qS8mkJvQqK7EPgWhL6/1dA6s3kT+4KX
|
|
||||||
qnSsiX/LCeAt7ldE3jUvfgOc2pcMmMC+hdCBSbJghDz4vAV+SIUJcuH4ZpiuExbJhgvS4RFD15Ey
|
|
||||||
6bCHI9zdEIPExAJRMYzF+9yUqHjF3Y2wi00ZkxvPeI81PsmNcZzZHAvWJiYe8o/ni+KYlekhQyay
|
|
||||||
QBIlETd9CXzIGpiYrkyRR1WSOc5kX8YkdkmMPInLChxa/n2/C2SEYPZ6VgrUmZcX5Db/TAFTSh5D
|
|
||||||
oizlWuBKVzkrgaG8oLGMqKoONxhYISSgOokc2mV93qXrgmmRPv0pUHfqlUL4rBz7McTS2AI1nYeq
|
|
||||||
YT4mzcJsPnFCwjWuKqtZWkYQQ2/NnABINHoiN+utclg56cJqKVpNe7VB+Izhg2yCCnsYrkL61ev8
|
|
||||||
MpgjzZZrqlWtkBWSkyFiyp5GYsAFKmxCI4WgQ7Qd8i9v//cgqBSzAH2tkWg9q9fELvZBZJGIXM3a
|
|
||||||
IMy+dZ2Z/BFNo9q8bmRIrhfipkLXLBS/ukgpCtCKcT8E4axqYVYRUgguU1rh2Hq3vqUNcH4zJBV1
|
|
||||||
aDVC/vI96gaHMYl2UwgcwnA4xLmt5XGI29zwZ/GnwVxqbYsa1hwHOMEZxAtmmjTebj41vhGB53/z
|
|
||||||
uUNOjZEPuRtlG1850eOQ85tHtg5rVR5BHH7yfUMkfws5hfOGd7uxh0J3vGsI0w3SPLPbLhQPPB5F
|
|
||||||
FIg+s4HL7J+Lew1MXbjbYhxOwf4eQcSO98293eyYoEIWvn0QkpfZ5BQhNJl5jJD6TW8hpYCCQPRc
|
|
||||||
sj4Q4glTzQjXGRI+0MubV+8C++P/LpDL+fuz6eEYFQA9ctWNPuCQl4iYxyzLWmywgw0RU5dqnpHQ
|
|
||||||
1RDaG48IDTEYIvYZfPUUcdPw+TUA70HfIIlPdkKk/v8m7hM/9zRm0fJh0jAh5AEnOISwkYs8kFGc
|
|
||||||
4Qx6Oib4tVoQJ0LaJVFcchS/fN0XFqQOdANKXkcgHzZL6+de7Nd1/UdImISACUhW81cd43VxLOaA
|
|
||||||
FgiBznaAGFiBBqiBSNZkBfiBDdiBDyiCpHaBJihfBBiC9PdsHLiBHtiCMSiBAyh/LwiDKJiCNxh+
|
|
||||||
KmiDO0iDCyhJGViCMkiEQNiDMJFCSOh/MyiAQfhMTDSBFGiER/iDVdiECOFOFPVPCLWF8dSFXlhR
|
|
||||||
DBWGeQGGZFiGY3iGdGFRGDVTP7VRNvWGJBWHcghUbliHnkGHeFgaeriHeShUEeiELFiEJJiDVxiF
|
|
||||||
/iOIg4YoiIPIiC6IhT4IiUkohey2hOoniUxIhStohZuIiE8ITp+YSpbIgCdYiIpoijrIiZFYaomY
|
|
||||||
ipiIR5q4igo4ikKoipPYioRIbbQIhbF4i6HIX0O4iJ3Yi5kojLKoi404jMboi7sIioGojKcYjbko
|
|
||||||
jYfIir/ITpTYdNloEUvmccn4S9vIjeFYitToiK9Iis94jK5IjLC4jMWIjLb4juUIjfOojjxoEXM2
|
|
||||||
ENJnd9r4M3Gmj9M3hRORj5unJtc3kP9YkOlTiQfzZJICJcImjhmxjwJBkAwZjF/nJ9gyC3g2LN+X
|
|
||||||
jhSnkYAnaHbyfDUYkpdWkYWjerCHEaImEJzi/ikRCZIHwZF59iWZpm0SeRE26ZGf8JICOYusVxBr
|
|
||||||
R5O1tzyTc5IJAWzCkpRKeZSbByrL0o9M4y6BF5Rz13e3d4+PWC63tpXeOJQDkW1YGRHmIjTtsm5P
|
|
||||||
2XjYkjxF2ZUVASsaV3Jw6ZVwApZhWZdmeWuvBxFedm7rUzAFN3k7uSiqgzEmWZhTpmwQcZbDNzJd
|
|
||||||
Fn+nxyt1MpcVgSl9Fnk0g5eIBIKBWSspNxGPBphxeWsVR5fWaJiAdwBBM5N19Wf3ljrL85b1lXB8
|
|
||||||
ojGWWRHGkmX/Y3CcCY5riW+qw5IUkWtOd2u0mZpDSThqmVqs1nFLeWtOCRE3A1sZAXZXaRHx/jIv
|
|
||||||
WsKSv8l/5NiYBSN5GlFuAtNuGad5PnmRn7l5X/Kdl5hJDuMQKYM9/rIHFZMR5Nl6IhA0OjkRHDM+
|
|
||||||
GLGfAwGf8SmU0Yc+V7J7iSkRK9MyDUkmVyJ8C0mVFuF9WAJA7XOQAzFw26egn0B3/0kRPPNE5VJ9
|
|
||||||
ZFIo3eOaE1E0RxOXKNolFHAJIMqenqgSQzd1V5M1SMc1X4OOJoE2U0c1Vfc2MheAG5GjN9c2fOM3
|
|
||||||
Pbo1SocRStpyibM4jfOkRwA5vIigJ9F2hRc6cldtE0dh2Qg7slN4nXN4uIN215YRXup2xROmKPGm
|
|
||||||
zgM90vNmTzOmfWSUKxE+AlpG7eWMJ/FK/lxJEJaHp33KP6G3E69AQB5UPYGKjcGJEjQkQZDKjChB
|
|
||||||
qHk5ZRz0qC9BQiP0BCF0QHoqYp5pE+kncZEqqJnqS8opEONHfr/SjXY0q/OxY8FJq7Wwf6RZTKvK
|
|
||||||
qq2adXlpfzLBq7rqe1XUqwWBq7k6jqXIrC35Ra6Ke/Eoj0eGqXq5jtdKjyWhqQdaj+oIrc3agOIa
|
|
||||||
rS7hrcoKrtjqq+b4qkZWruZ6rtPamdcoqehWqvbKp7UIr/Eqr8KamdpKgvwannZGVQOrmC+hqcf6
|
|
||||||
rTB4sPq6sATmsJPqEYQKsem6gRKLkdSqE7mkTvhai5M0rwA7jTYxTOyqrgxLTcvkGhk7/rEfMUoW
|
|
||||||
O5k4UU3X9LHA+hBaqIZ0IQhkUE9YIFH5pLNwYYZCKxaKsAWNwE9pWLRrQbRMqxaCgAL+BLRPmxZs
|
|
||||||
SBEZ5YehQQIeUAEGMAE9pbV5eIdiqxgbcAQqMAIdYAGE0Ydlexlu+7aTQQIQMBg85VNyKxlB5bIl
|
|
||||||
sVm1sF3NOBKR9Qd4sARnkAg54KwaWxNZAAOA0LLjWlVG5QnJ9Y0qcVdOBVVSFbhdmgVXZbNAmq0x
|
|
||||||
0VW1FWP/yq0uYVYUlFanW4034VZwNRBzhYqFahOYm1eM5Vfs2LlHFrMWi1hJtVh8pbsoO7IxEVmT
|
|
||||||
VVmnVa0o4bedpbiiKxOiRVqmhaiu/guPqsVarmWdlqsSs0VLYFWvI5FbuxWbtFuw7yVcxtuuM3Fc
|
|
||||||
mVS5zGtj6uu7p7pc00a/ybRMAwG43asS9oW/BMsSDwbAOaFeRcRe/YsS/kXAiyvA03axJIsekBvA
|
|
||||||
DlxdDBy9NvbAEHy9LTLBDVzB9wW9N/rBCqzBG8y+K+LBI2y/AHfBK+xgJnzCqHuEKsylMFFiIuyu
|
|
||||||
OgzCm+qOL1TDG3vDMezCO+y/Mby+M+yIQIy+MAydMlu8MjwSnJbDNoyAS0yvKXbETxywQYyQFrdl
|
|
||||||
qElsyEFlS5eQYtagD/EoHWKRtQBAH5kQfxmfrJSPFOqQ/ZqgXWI2FLlnWvzE1nsQ/ntsZahZxF0c
|
|
||||||
EUApEIuWfBxXxbD5aSIJk4oMEYeWaC75yIiMxnuWcAeqSYdcoJFcxRDRkwgjym8cY338xJ52PR05
|
|
||||||
yiRJoAj7wnY5EKRiayUXb0/8nA3xdINMnbFmvrq3kcJiER76xOnGlyNKwmXsPrQpxt9xbNqndn0X
|
|
||||||
lYJHwcApegUTbpNmy1sMSfO5bBkXo80pEdxmbkPJKNwCAMfMEOXGeEZUqiljoFGcy7aXfPEGHfRm
|
|
||||||
b7I5liKQzrAMynt5lwznOtq8zQIxzMK5PKfpaxB3f78MJ24ZzROx0Kqaz1uCyRjsEK/Xl7J7yusL
|
|
||||||
ciKXEL0ymGVZuxMRLUCndQYh/nVDWqSHc6RQSZQQbUc6+nI7h6VHEKWQ7NBDo2lTenNGZ9M3jXmq
|
|
||||||
k5z9PBGh2caYrNJL+nIwd3XCetRtXMqETNIN/ZDoAwD8KBCEh6ahoKbOw6YvTRBFSae483Zx58QU
|
|
||||||
/SyXIxBk7Tx692vDadEXvRAsSZwFsdV459XCk3iLF5LTTNTYO9UP8c6fLNiH6s1w4gWpx6JM5Hmm
|
|
||||||
15610DqFjRCl5z/HKWes6XcV4cqubKMGIXu093O+qZ6c98qCzRAY6sm77M+/56kGgaHOR5gVYXyt
|
|
||||||
S3A1yj7hzBCxqh+pbdembZYxmjGiENxy7c+1kH2MWRAMCgtjUqF3fNooHKsu/lF+53cT6YfE9piL
|
|
||||||
7gd/SVzNM0KsMJF/VFwQvJqyHBywAHjeTLy7IMveW3q+KFzI8N3d2R3fXBzBPezDoXuO7a3f/R3Y
|
|
||||||
/v3eUCzg963e+T3f9W3fBq7gDI7FnJuvCfzfA36zxo3f9L2uAU7gC+7dEa7hG47hGS6KyJzgJF7i
|
|
||||||
1mrhJm7eH37iK96OCA7iAP7iLN7gKe7iBX7gEy7i8evhNA7j8p3jwLjjFC7jNr4QOVu1buG0SD4W
|
|
||||||
Sr7kYtHkTq60Ua4WUD7lXHG1E5G1eZsZcbvljNHlXr4YYB7miDHmZH4YZn7mbQuII+7jKF7jEn7j
|
|
||||||
F67iPT7jc77f7j3kPy7n/nAe5y1e5H8ez24e6H5e53Y+6DjO54hu6Hge4kFe1EAO4UKu4/zN4xw+
|
|
||||||
6Y+e55Su6Zle4YSu54p+6Ive5zFL0Ize6JEu6e5d6kTs6KrO6a/u6adu6X0O6m8u6nR+54U+67b+
|
|
||||||
6Zsu67pO66M+7MQO6Il+68bO679O5Ki+58je7KGe7MHe6w5+E3F8rF62ZHGM3dglmab+Etk+3s5+
|
|
||||||
7A2xx5EtAlK9aZrcIRR5xrINZbY6kXbsxqstu5rM7R+ax3Wcx6K57koSyAaZKvGOPA4pyCO93hFB
|
|
||||||
ynCSyPWOEMaJJAoPzwVNBSbLk6v8JVAdEcOsHwq/dZN9EA9vZhcfoivJ/tgOMS0Vj48jH5PDYvLA
|
|
||||||
Dp4agS+z/PEJYZ7qMikSLxCs0ANMwHj+6AhTaRHrLOhw5j4aDRE2zxGTkp0XsfM9X5WOoCzB/Nwv
|
|
||||||
n8/YTPMK8aAM/ZnqpjR2cO9cvy0LZBESzT0FA89a/zJoGdPc+PUm+pkPndvQfekXcScL13D61tNU
|
|
||||||
WtNYitM/p20JbRB6/zY516RA7fcCcSdxzzBDKjU/bdOI//cVLduDnzdX0zeHrxCahpjvnkkr7TaG
|
|
||||||
D/kI0SshEwCQaaFtrhB2c9Ku09bCA6Zo/RBQvXauXzt2cNYXYTcyo2m1Tztv3ZtkRvtcvTmwf50a
|
|
||||||
8ztCM81szdW2g/uV/maSgD3u1V5pUgkldeco4vMx1xmR0b8QMvAFj039lqLW/VkRlf3tjvw9GQ+g
|
|
||||||
2Q9uQ8OcGvH94V8Rdj2dqY/vo5+YBlqpSkKgio3IACGgVS2CBQ0eRFiQUhEwrxI+hOiFQqyCtETQ
|
|
||||||
qVWKwCeIHWtRenLIYa0XgDyeJCiRYsFZBzCi9AjykAyTMDuqLJgpAEeNHG1CXNjw50OcB1vaGAqx
|
|
||||||
ZNKCS5kaLDUAwFQAEwn2fErQU5c6qEjWzJpRKlUKosZaDbu1zg2wWaNSrRrrLQBHTNV6bdr26dyp
|
|
||||||
EwsJDFvr7tfAYuH6pVo3sFq2hflWdXVgKtLCBJ0yvVxZs0FUYzzl/t0cmrNnwqIrd/58MLPpwKhB
|
|
||||||
sw7tejVszbNt2qZdGHfurLt5P/X9e2hw4T+JF0d5/KFy5B6ZN1+uF3rS59NVS7d+G3v2k9UNeude
|
|
||||||
Orz28cO3l08Inrt66+zZtz+P/rp8mO+h278fn75l/R3xN/+vuAAF7I++AYU7kDf3CjSQQfQSVNDB
|
|
||||||
8iDMjULYFtyvOwnHs/DCDcPrkLUQRcMwQ/8+XA/FFE1USsXsRgytRBbTc3E6GGOsMb8Zo9sRIRl7
|
|
||||||
fA1I/oT8LkcAjTySyCGBQxK5G2trkkAlxSPyycp+FNJK3aJEkMsIp6QSSCzF9LLCMs2cUsst03RR
|
|
||||||
zcDc7O1M2uBksRJMOjFz8QQsLOGzTz//BDRQQQcldFAN9iw0UUUXTfRQRh+F9FFHI6W00j8ntTRT
|
|
||||||
SjHVtFNFNeAjKzciqKBUU09FNVVVV2W1VVYfINVVWWelVVZYa8U1V1xv1bVXX1Hl9Vdhew12WGNn
|
|
||||||
feARMJdltllnn4U2WmmnpbZaa6/FNlttt+W2W2+/BTdcccclt1xzz0U3XXXXZbddd9+FN15556W3
|
|
||||||
XnvvxTdfffflt19//+03IAA7
|
|
||||||
@@ -1,213 +0,0 @@
|
|||||||
iVBORw0KGgoAAAANSUhEUgAAAlgAAAEcCAMAAAAsmToJAAAAAXNSR0IArs4c6QAAAwBQTFRFAAEA
|
|
||||||
EAEBAwUBCgMBCAUKAgkMHQIDCwYXFQYDBgkVDwgFCAsHChASJwkDFA4NEg4TDhANHgwHDg8aExAG
|
|
||||||
DBEjBBUZERMQCBNRDxU0ExcZFRgVFRcgCRkzHBcUDRdCNRELIxYTAx4mLBUMEBwcEhsiDxwhExsu
|
|
||||||
Dh8XJRkQByAtDCMUHx4bACk0DSsiGScsFCRcJSUiGSZCDiwqGCg1LyQbIycpVhsPDy0wNyQVECxA
|
|
||||||
PSIfCS84ADJCEStWRiIULSwpADdHCDkgEy1/BjorEjhADDhXCzZvITNPUysQDzs8MjIvCj04BT1O
|
|
||||||
PDEoQjEhMDU3LzY9KTdFTTMYNzk2GD6PAEpfEUVjBExFCEpPB1ArK0FjKEVZYTscdDYXG0d5SkA5
|
|
||||||
FEiJQUNAOURPAFhCA1RpP0ZJVEMvYUAyBFtRWkYnDlR+QEleAF1jkTojHlV1AGB4PlN5YU87cUws
|
|
||||||
SVRXAGaBWVJKUlRRRVZlAG1PWFNSBGt5AmqVAG+NAHNpK17BWl9ifFs9KWmnSGZ0YGFfp1IuCnWj
|
|
||||||
AHuKbWBXoVNAdGBPDniWAHujTWmLk14rAH+ch19XX2aRX2t8AIeLiWgvAIeeAIaqa21rOnehdW1m
|
|
||||||
AImspWJYj2tLW3C0AIyvWXaNAo6xb3Z5dXZzent4WIKiQojAen+CkX1pcoSWcYDOoH9fp4E+Y4ur
|
|
||||||
hoWCXIvGb4mut3xpqYNYnYdUO5rDyXxdjY6LYJqk0IRGb5azXZnMjJGUgJWqpJB8l5aUyJN4kKK1
|
|
||||||
rZ6IYqzge6Xho6GdnaWpgqy6yZ9zvaR0hqzMk6rN5Jxxw6mF26lbq7C2pLTGwrCbs7Owvb+8zcGc
|
|
||||||
8rp42L2xsMbY3L+jtMfsz8W2nM/yx8jH0MfA7MWU78h/3crIyNTo4NLD6dK1z9bc1dbT3NXOv9vr
|
|
||||||
/OKSwur8++Gw4uTh0ef78uPU+OPL3Ojz++bGyfH36evo/+3b6vT88vPw/feu1/v+//bb//nK/PnW
|
|
||||||
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
|
|
||||||
@@ -1,206 +0,0 @@
|
|||||||
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
|
|
||||||
1
Documentation/DocBook/media/v4l/.gitignore
vendored
1
Documentation/DocBook/media/v4l/.gitignore
vendored
@@ -1 +0,0 @@
|
|||||||
!*.xml
|
|
||||||
@@ -1,371 +0,0 @@
|
|||||||
<bibliography>
|
|
||||||
<title>References</title>
|
|
||||||
|
|
||||||
<biblioentry id="cea608">
|
|
||||||
<abbrev>CEA 608-E</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>Consumer Electronics Association (<ulink
|
|
||||||
url="http://www.ce.org">http://www.ce.org</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>CEA-608-E R-2014 "Line 21 Data Services"</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="en300294">
|
|
||||||
<abbrev>EN 300 294</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>European Telecommunication Standards Institute
|
|
||||||
(<ulink url="http://www.etsi.org">http://www.etsi.org</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>EN 300 294 "625-line television Wide Screen Signalling
|
|
||||||
(WSS)"</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="ets300231">
|
|
||||||
<abbrev>ETS 300 231</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>European Telecommunication Standards Institute
|
|
||||||
(<ulink
|
|
||||||
url="http://www.etsi.org">http://www.etsi.org</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>ETS 300 231 "Specification of the domestic video
|
|
||||||
Programme Delivery Control system (PDC)"</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="ets300706">
|
|
||||||
<abbrev>ETS 300 706</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>European Telecommunication Standards Institute
|
|
||||||
(<ulink url="http://www.etsi.org">http://www.etsi.org</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>ETS 300 706 "Enhanced Teletext specification"</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="mpeg2part1">
|
|
||||||
<abbrev>ISO 13818-1</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>International Telecommunication Union (<ulink
|
|
||||||
url="http://www.itu.ch">http://www.itu.ch</ulink>), International
|
|
||||||
Organisation for Standardisation (<ulink
|
|
||||||
url="http://www.iso.ch">http://www.iso.ch</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>ITU-T Rec. H.222.0 | ISO/IEC 13818-1 "Information
|
|
||||||
technology — Generic coding of moving pictures and associated
|
|
||||||
audio information: Systems"</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="mpeg2part2">
|
|
||||||
<abbrev>ISO 13818-2</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>International Telecommunication Union (<ulink
|
|
||||||
url="http://www.itu.ch">http://www.itu.ch</ulink>), International
|
|
||||||
Organisation for Standardisation (<ulink
|
|
||||||
url="http://www.iso.ch">http://www.iso.ch</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>ITU-T Rec. H.262 | ISO/IEC 13818-2 "Information
|
|
||||||
technology — Generic coding of moving pictures and associated
|
|
||||||
audio information: Video"</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="itu470">
|
|
||||||
<abbrev>ITU BT.470</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>International Telecommunication Union (<ulink
|
|
||||||
url="http://www.itu.ch">http://www.itu.ch</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>ITU-R Recommendation BT.470-6 "Conventional Television
|
|
||||||
Systems"</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="itu601">
|
|
||||||
<abbrev>ITU BT.601</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>International Telecommunication Union (<ulink
|
|
||||||
url="http://www.itu.ch">http://www.itu.ch</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>ITU-R Recommendation BT.601-5 "Studio Encoding Parameters
|
|
||||||
of Digital Television for Standard 4:3 and Wide-Screen 16:9 Aspect
|
|
||||||
Ratios"</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="itu653">
|
|
||||||
<abbrev>ITU BT.653</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>International Telecommunication Union (<ulink
|
|
||||||
url="http://www.itu.ch">http://www.itu.ch</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>ITU-R Recommendation BT.653-3 "Teletext systems"</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="itu709">
|
|
||||||
<abbrev>ITU BT.709</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>International Telecommunication Union (<ulink
|
|
||||||
url="http://www.itu.ch">http://www.itu.ch</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>ITU-R Recommendation BT.709-5 "Parameter values for the
|
|
||||||
HDTV standards for production and international programme
|
|
||||||
exchange"</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="itu1119">
|
|
||||||
<abbrev>ITU BT.1119</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>International Telecommunication Union (<ulink
|
|
||||||
url="http://www.itu.ch">http://www.itu.ch</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>ITU-R Recommendation BT.1119 "625-line
|
|
||||||
television Wide Screen Signalling (WSS)"</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="jfif">
|
|
||||||
<abbrev>JFIF</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>Independent JPEG Group (<ulink
|
|
||||||
url="http://www.ijg.org">http://www.ijg.org</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>JPEG File Interchange Format</title>
|
|
||||||
<subtitle>Version 1.02</subtitle>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="itu-t81">
|
|
||||||
<abbrev>ITU-T.81</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>International Telecommunication Union
|
|
||||||
(<ulink url="http://www.itu.int">http://www.itu.int</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>ITU-T Recommendation T.81
|
|
||||||
"Information Technology — Digital Compression and Coding of Continous-Tone
|
|
||||||
Still Images — Requirements and Guidelines"</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="w3c-jpeg-jfif">
|
|
||||||
<abbrev>W3C JPEG JFIF</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>The World Wide Web Consortium (<ulink
|
|
||||||
url="http://www.w3.org/Graphics/JPEG">http://www.w3.org</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>JPEG JFIF</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="smpte12m">
|
|
||||||
<abbrev>SMPTE 12M</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>Society of Motion Picture and Television Engineers
|
|
||||||
(<ulink url="http://www.smpte.org">http://www.smpte.org</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>SMPTE 12M-1999 "Television, Audio and Film - Time and
|
|
||||||
Control Code"</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="smpte170m">
|
|
||||||
<abbrev>SMPTE 170M</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>Society of Motion Picture and Television Engineers
|
|
||||||
(<ulink url="http://www.smpte.org">http://www.smpte.org</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>SMPTE 170M-1999 "Television - Composite Analog Video
|
|
||||||
Signal - NTSC for Studio Applications"</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="smpte240m">
|
|
||||||
<abbrev>SMPTE 240M</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>Society of Motion Picture and Television Engineers
|
|
||||||
(<ulink url="http://www.smpte.org">http://www.smpte.org</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>SMPTE 240M-1999 "Television - Signal Parameters -
|
|
||||||
1125-Line High-Definition Production"</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="smpte431">
|
|
||||||
<abbrev>SMPTE RP 431-2</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>Society of Motion Picture and Television Engineers
|
|
||||||
(<ulink url="http://www.smpte.org">http://www.smpte.org</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>SMPTE RP 431-2:2011 "D-Cinema Quality - Reference Projector and Environment"</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="smpte2084">
|
|
||||||
<abbrev>SMPTE ST 2084</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>Society of Motion Picture and Television Engineers
|
|
||||||
(<ulink url="http://www.smpte.org">http://www.smpte.org</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>SMPTE ST 2084:2014 "High Dynamic Range Electro-Optical Transfer Function of Master Reference Displays"</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="srgb">
|
|
||||||
<abbrev>sRGB</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>International Electrotechnical Commission
|
|
||||||
(<ulink url="http://www.iec.ch">http://www.iec.ch</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>IEC 61966-2-1 ed1.0 "Multimedia systems and equipment - Colour measurement
|
|
||||||
and management - Part 2-1: Colour management - Default RGB colour space - sRGB"</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="sycc">
|
|
||||||
<abbrev>sYCC</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>International Electrotechnical Commission
|
|
||||||
(<ulink url="http://www.iec.ch">http://www.iec.ch</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>IEC 61966-2-1-am1 ed1.0 "Amendment 1 - Multimedia systems and equipment - Colour measurement
|
|
||||||
and management - Part 2-1: Colour management - Default RGB colour space - sRGB"</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="xvycc">
|
|
||||||
<abbrev>xvYCC</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>International Electrotechnical Commission
|
|
||||||
(<ulink url="http://www.iec.ch">http://www.iec.ch</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>IEC 61966-2-4 ed1.0 "Multimedia systems and equipment - Colour measurement
|
|
||||||
and management - Part 2-4: Colour management - Extended-gamut YCC colour space for video
|
|
||||||
applications - xvYCC"</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="adobergb">
|
|
||||||
<abbrev>AdobeRGB</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>Adobe Systems Incorporated (<ulink url="http://www.adobe.com">http://www.adobe.com</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>Adobe© RGB (1998) Color Image Encoding Version 2005-05</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="oprgb">
|
|
||||||
<abbrev>opRGB</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>International Electrotechnical Commission
|
|
||||||
(<ulink url="http://www.iec.ch">http://www.iec.ch</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>IEC 61966-2-5 "Multimedia systems and equipment - Colour measurement
|
|
||||||
and management - Part 2-5: Colour management - Optional RGB colour space - opRGB"</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="itu2020">
|
|
||||||
<abbrev>ITU BT.2020</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>International Telecommunication Union (<ulink
|
|
||||||
url="http://www.itu.ch">http://www.itu.ch</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>ITU-R Recommendation BT.2020 (08/2012) "Parameter values for ultra-high
|
|
||||||
definition television systems for production and international programme exchange"
|
|
||||||
</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="tech3213">
|
|
||||||
<abbrev>EBU Tech 3213</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>European Broadcast Union (<ulink
|
|
||||||
url="http://www.ebu.ch">http://www.ebu.ch</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>E.B.U. Standard for Chromaticity Tolerances for Studio Monitors"</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="iec62106">
|
|
||||||
<abbrev>IEC 62106</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>International Electrotechnical Commission
|
|
||||||
(<ulink url="http://www.iec.ch">http://www.iec.ch</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>Specification of the radio data system (RDS) for VHF/FM sound broadcasting
|
|
||||||
in the frequency range from 87,5 to 108,0 MHz</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="nrsc4">
|
|
||||||
<abbrev>NRSC-4-B</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>National Radio Systems Committee
|
|
||||||
(<ulink url="http://www.nrscstandards.org">http://www.nrscstandards.org</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>NRSC-4-B: United States RBDS Standard</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="iso12232">
|
|
||||||
<abbrev>ISO 12232:2006</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>International Organization for Standardization
|
|
||||||
(<ulink url="http://www.iso.org">http://www.iso.org</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>Photography — Digital still cameras — Determination
|
|
||||||
of exposure index, ISO speed ratings, standard output sensitivity, and
|
|
||||||
recommended exposure index</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="cea861">
|
|
||||||
<abbrev>CEA-861-E</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>Consumer Electronics Association
|
|
||||||
(<ulink url="http://www.ce.org">http://www.ce.org</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>A DTV Profile for Uncompressed High Speed Digital Interfaces</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="vesadmt">
|
|
||||||
<abbrev>VESA DMT</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>Video Electronics Standards Association
|
|
||||||
(<ulink url="http://www.vesa.org">http://www.vesa.org</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>VESA and Industry Standards and Guidelines for Computer Display Monitor Timing (DMT)</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="vesaedid">
|
|
||||||
<abbrev>EDID</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>Video Electronics Standards Association
|
|
||||||
(<ulink url="http://www.vesa.org">http://www.vesa.org</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>VESA Enhanced Extended Display Identification Data Standard</title>
|
|
||||||
<subtitle>Release A, Revision 2</subtitle>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="hdcp">
|
|
||||||
<abbrev>HDCP</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>Digital Content Protection LLC
|
|
||||||
(<ulink url="http://www.digital-cp.com">http://www.digital-cp.com</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>High-bandwidth Digital Content Protection System</title>
|
|
||||||
<subtitle>Revision 1.3</subtitle>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="hdmi">
|
|
||||||
<abbrev>HDMI</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>HDMI Licensing LLC
|
|
||||||
(<ulink url="http://www.hdmi.org">http://www.hdmi.org</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>High-Definition Multimedia Interface</title>
|
|
||||||
<subtitle>Specification Version 1.4a</subtitle>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="dp">
|
|
||||||
<abbrev>DP</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>Video Electronics Standards Association
|
|
||||||
(<ulink url="http://www.vesa.org">http://www.vesa.org</ulink>)</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>VESA DisplayPort Standard</title>
|
|
||||||
<subtitle>Version 1, Revision 2</subtitle>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="poynton">
|
|
||||||
<abbrev>poynton</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>Charles Poynton</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>Digital Video and HDTV, Algorithms and Interfaces</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
<biblioentry id="colimg">
|
|
||||||
<abbrev>colimg</abbrev>
|
|
||||||
<authorgroup>
|
|
||||||
<corpauthor>Erik Reinhard et al.</corpauthor>
|
|
||||||
</authorgroup>
|
|
||||||
<title>Color Imaging: Fundamentals and Applications</title>
|
|
||||||
</biblioentry>
|
|
||||||
|
|
||||||
</bibliography>
|
|
||||||
@@ -1,659 +0,0 @@
|
|||||||
<programlisting>
|
|
||||||
/*
|
|
||||||
* V4L2 video capture example
|
|
||||||
*
|
|
||||||
* This program can be used and distributed without restrictions.
|
|
||||||
*
|
|
||||||
* This program is provided with the V4L2 API
|
|
||||||
* see https://linuxtv.org/docs.php for more information
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
#include <getopt.h> /* getopt_long() */
|
|
||||||
|
|
||||||
#include <fcntl.h> /* low-level i/o */
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/time.h>
|
|
||||||
#include <sys/mman.h>
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
|
|
||||||
#include <linux/videodev2.h>
|
|
||||||
|
|
||||||
#define CLEAR(x) memset(&(x), 0, sizeof(x))
|
|
||||||
|
|
||||||
enum io_method {
|
|
||||||
IO_METHOD_READ,
|
|
||||||
IO_METHOD_MMAP,
|
|
||||||
IO_METHOD_USERPTR,
|
|
||||||
};
|
|
||||||
|
|
||||||
struct buffer {
|
|
||||||
void *start;
|
|
||||||
size_t length;
|
|
||||||
};
|
|
||||||
|
|
||||||
static char *dev_name;
|
|
||||||
static enum io_method io = IO_METHOD_MMAP;
|
|
||||||
static int fd = -1;
|
|
||||||
struct buffer *buffers;
|
|
||||||
static unsigned int n_buffers;
|
|
||||||
static int out_buf;
|
|
||||||
static int force_format;
|
|
||||||
static int frame_count = 70;
|
|
||||||
|
|
||||||
static void errno_exit(const char *s)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "%s error %d, %s\n", s, errno, strerror(errno));
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int xioctl(int fh, int request, void *arg)
|
|
||||||
{
|
|
||||||
int r;
|
|
||||||
|
|
||||||
do {
|
|
||||||
r = ioctl(fh, request, arg);
|
|
||||||
} while (-1 == r && EINTR == errno);
|
|
||||||
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void process_image(const void *p, int size)
|
|
||||||
{
|
|
||||||
if (out_buf)
|
|
||||||
fwrite(p, size, 1, stdout);
|
|
||||||
|
|
||||||
fflush(stderr);
|
|
||||||
fprintf(stderr, ".");
|
|
||||||
fflush(stdout);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int read_frame(void)
|
|
||||||
{
|
|
||||||
struct <link linkend="v4l2-buffer">v4l2_buffer</link> buf;
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
switch (io) {
|
|
||||||
case IO_METHOD_READ:
|
|
||||||
if (-1 == read(fd, buffers[0].start, buffers[0].length)) {
|
|
||||||
switch (errno) {
|
|
||||||
case EAGAIN:
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case EIO:
|
|
||||||
/* Could ignore EIO, see spec. */
|
|
||||||
|
|
||||||
/* fall through */
|
|
||||||
|
|
||||||
default:
|
|
||||||
errno_exit("read");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
process_image(buffers[0].start, buffers[0].length);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IO_METHOD_MMAP:
|
|
||||||
CLEAR(buf);
|
|
||||||
|
|
||||||
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
|
||||||
buf.memory = V4L2_MEMORY_MMAP;
|
|
||||||
|
|
||||||
if (-1 == xioctl(fd, VIDIOC_DQBUF, &buf)) {
|
|
||||||
switch (errno) {
|
|
||||||
case EAGAIN:
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case EIO:
|
|
||||||
/* Could ignore EIO, see spec. */
|
|
||||||
|
|
||||||
/* fall through */
|
|
||||||
|
|
||||||
default:
|
|
||||||
errno_exit("VIDIOC_DQBUF");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
assert(buf.index < n_buffers);
|
|
||||||
|
|
||||||
process_image(buffers[buf.index].start, buf.bytesused);
|
|
||||||
|
|
||||||
if (-1 == xioctl(fd, VIDIOC_QBUF, &buf))
|
|
||||||
errno_exit("VIDIOC_QBUF");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IO_METHOD_USERPTR:
|
|
||||||
CLEAR(buf);
|
|
||||||
|
|
||||||
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
|
||||||
buf.memory = V4L2_MEMORY_USERPTR;
|
|
||||||
|
|
||||||
if (-1 == xioctl(fd, VIDIOC_DQBUF, &buf)) {
|
|
||||||
switch (errno) {
|
|
||||||
case EAGAIN:
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case EIO:
|
|
||||||
/* Could ignore EIO, see spec. */
|
|
||||||
|
|
||||||
/* fall through */
|
|
||||||
|
|
||||||
default:
|
|
||||||
errno_exit("VIDIOC_DQBUF");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < n_buffers; ++i)
|
|
||||||
if (buf.m.userptr == (unsigned long)buffers[i].start
|
|
||||||
&& buf.length == buffers[i].length)
|
|
||||||
break;
|
|
||||||
|
|
||||||
assert(i < n_buffers);
|
|
||||||
|
|
||||||
process_image((void *)buf.m.userptr, buf.bytesused);
|
|
||||||
|
|
||||||
if (-1 == xioctl(fd, VIDIOC_QBUF, &buf))
|
|
||||||
errno_exit("VIDIOC_QBUF");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void mainloop(void)
|
|
||||||
{
|
|
||||||
unsigned int count;
|
|
||||||
|
|
||||||
count = frame_count;
|
|
||||||
|
|
||||||
while (count-- > 0) {
|
|
||||||
for (;;) {
|
|
||||||
fd_set fds;
|
|
||||||
struct timeval tv;
|
|
||||||
int r;
|
|
||||||
|
|
||||||
FD_ZERO(&fds);
|
|
||||||
FD_SET(fd, &fds);
|
|
||||||
|
|
||||||
/* Timeout. */
|
|
||||||
tv.tv_sec = 2;
|
|
||||||
tv.tv_usec = 0;
|
|
||||||
|
|
||||||
r = select(fd + 1, &fds, NULL, NULL, &tv);
|
|
||||||
|
|
||||||
if (-1 == r) {
|
|
||||||
if (EINTR == errno)
|
|
||||||
continue;
|
|
||||||
errno_exit("select");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (0 == r) {
|
|
||||||
fprintf(stderr, "select timeout\n");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (read_frame())
|
|
||||||
break;
|
|
||||||
/* EAGAIN - continue select loop. */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void stop_capturing(void)
|
|
||||||
{
|
|
||||||
enum <link linkend="v4l2-buf-type">v4l2_buf_type</link> type;
|
|
||||||
|
|
||||||
switch (io) {
|
|
||||||
case IO_METHOD_READ:
|
|
||||||
/* Nothing to do. */
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IO_METHOD_MMAP:
|
|
||||||
case IO_METHOD_USERPTR:
|
|
||||||
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
|
||||||
if (-1 == xioctl(fd, VIDIOC_STREAMOFF, &type))
|
|
||||||
errno_exit("VIDIOC_STREAMOFF");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void start_capturing(void)
|
|
||||||
{
|
|
||||||
unsigned int i;
|
|
||||||
enum <link linkend="v4l2-buf-type">v4l2_buf_type</link> type;
|
|
||||||
|
|
||||||
switch (io) {
|
|
||||||
case IO_METHOD_READ:
|
|
||||||
/* Nothing to do. */
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IO_METHOD_MMAP:
|
|
||||||
for (i = 0; i < n_buffers; ++i) {
|
|
||||||
struct <link linkend="v4l2-buffer">v4l2_buffer</link> buf;
|
|
||||||
|
|
||||||
CLEAR(buf);
|
|
||||||
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
|
||||||
buf.memory = V4L2_MEMORY_MMAP;
|
|
||||||
buf.index = i;
|
|
||||||
|
|
||||||
if (-1 == xioctl(fd, VIDIOC_QBUF, &buf))
|
|
||||||
errno_exit("VIDIOC_QBUF");
|
|
||||||
}
|
|
||||||
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
|
||||||
if (-1 == xioctl(fd, VIDIOC_STREAMON, &type))
|
|
||||||
errno_exit("VIDIOC_STREAMON");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IO_METHOD_USERPTR:
|
|
||||||
for (i = 0; i < n_buffers; ++i) {
|
|
||||||
struct <link linkend="v4l2-buffer">v4l2_buffer</link> buf;
|
|
||||||
|
|
||||||
CLEAR(buf);
|
|
||||||
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
|
||||||
buf.memory = V4L2_MEMORY_USERPTR;
|
|
||||||
buf.index = i;
|
|
||||||
buf.m.userptr = (unsigned long)buffers[i].start;
|
|
||||||
buf.length = buffers[i].length;
|
|
||||||
|
|
||||||
if (-1 == xioctl(fd, VIDIOC_QBUF, &buf))
|
|
||||||
errno_exit("VIDIOC_QBUF");
|
|
||||||
}
|
|
||||||
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
|
||||||
if (-1 == xioctl(fd, VIDIOC_STREAMON, &type))
|
|
||||||
errno_exit("VIDIOC_STREAMON");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void uninit_device(void)
|
|
||||||
{
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
switch (io) {
|
|
||||||
case IO_METHOD_READ:
|
|
||||||
free(buffers[0].start);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IO_METHOD_MMAP:
|
|
||||||
for (i = 0; i < n_buffers; ++i)
|
|
||||||
if (-1 == munmap(buffers[i].start, buffers[i].length))
|
|
||||||
errno_exit("munmap");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IO_METHOD_USERPTR:
|
|
||||||
for (i = 0; i < n_buffers; ++i)
|
|
||||||
free(buffers[i].start);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
free(buffers);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void init_read(unsigned int buffer_size)
|
|
||||||
{
|
|
||||||
buffers = calloc(1, sizeof(*buffers));
|
|
||||||
|
|
||||||
if (!buffers) {
|
|
||||||
fprintf(stderr, "Out of memory\n");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
buffers[0].length = buffer_size;
|
|
||||||
buffers[0].start = malloc(buffer_size);
|
|
||||||
|
|
||||||
if (!buffers[0].start) {
|
|
||||||
fprintf(stderr, "Out of memory\n");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void init_mmap(void)
|
|
||||||
{
|
|
||||||
struct <link linkend="v4l2-requestbuffers">v4l2_requestbuffers</link> req;
|
|
||||||
|
|
||||||
CLEAR(req);
|
|
||||||
|
|
||||||
req.count = 4;
|
|
||||||
req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
|
||||||
req.memory = V4L2_MEMORY_MMAP;
|
|
||||||
|
|
||||||
if (-1 == xioctl(fd, VIDIOC_REQBUFS, &req)) {
|
|
||||||
if (EINVAL == errno) {
|
|
||||||
fprintf(stderr, "%s does not support "
|
|
||||||
"memory mapping\n", dev_name);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
} else {
|
|
||||||
errno_exit("VIDIOC_REQBUFS");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (req.count < 2) {
|
|
||||||
fprintf(stderr, "Insufficient buffer memory on %s\n",
|
|
||||||
dev_name);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
buffers = calloc(req.count, sizeof(*buffers));
|
|
||||||
|
|
||||||
if (!buffers) {
|
|
||||||
fprintf(stderr, "Out of memory\n");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (n_buffers = 0; n_buffers < req.count; ++n_buffers) {
|
|
||||||
struct <link linkend="v4l2-buffer">v4l2_buffer</link> buf;
|
|
||||||
|
|
||||||
CLEAR(buf);
|
|
||||||
|
|
||||||
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
|
||||||
buf.memory = V4L2_MEMORY_MMAP;
|
|
||||||
buf.index = n_buffers;
|
|
||||||
|
|
||||||
if (-1 == xioctl(fd, VIDIOC_QUERYBUF, &buf))
|
|
||||||
errno_exit("VIDIOC_QUERYBUF");
|
|
||||||
|
|
||||||
buffers[n_buffers].length = buf.length;
|
|
||||||
buffers[n_buffers].start =
|
|
||||||
mmap(NULL /* start anywhere */,
|
|
||||||
buf.length,
|
|
||||||
PROT_READ | PROT_WRITE /* required */,
|
|
||||||
MAP_SHARED /* recommended */,
|
|
||||||
fd, buf.m.offset);
|
|
||||||
|
|
||||||
if (MAP_FAILED == buffers[n_buffers].start)
|
|
||||||
errno_exit("mmap");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void init_userp(unsigned int buffer_size)
|
|
||||||
{
|
|
||||||
struct <link linkend="v4l2-requestbuffers">v4l2_requestbuffers</link> req;
|
|
||||||
|
|
||||||
CLEAR(req);
|
|
||||||
|
|
||||||
req.count = 4;
|
|
||||||
req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
|
||||||
req.memory = V4L2_MEMORY_USERPTR;
|
|
||||||
|
|
||||||
if (-1 == xioctl(fd, VIDIOC_REQBUFS, &req)) {
|
|
||||||
if (EINVAL == errno) {
|
|
||||||
fprintf(stderr, "%s does not support "
|
|
||||||
"user pointer i/o\n", dev_name);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
} else {
|
|
||||||
errno_exit("VIDIOC_REQBUFS");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
buffers = calloc(4, sizeof(*buffers));
|
|
||||||
|
|
||||||
if (!buffers) {
|
|
||||||
fprintf(stderr, "Out of memory\n");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (n_buffers = 0; n_buffers < 4; ++n_buffers) {
|
|
||||||
buffers[n_buffers].length = buffer_size;
|
|
||||||
buffers[n_buffers].start = malloc(buffer_size);
|
|
||||||
|
|
||||||
if (!buffers[n_buffers].start) {
|
|
||||||
fprintf(stderr, "Out of memory\n");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void init_device(void)
|
|
||||||
{
|
|
||||||
struct <link linkend="v4l2-capability">v4l2_capability</link> cap;
|
|
||||||
struct <link linkend="v4l2-cropcap">v4l2_cropcap</link> cropcap;
|
|
||||||
struct <link linkend="v4l2-crop">v4l2_crop</link> crop;
|
|
||||||
struct <link linkend="v4l2-format">v4l2_format</link> fmt;
|
|
||||||
unsigned int min;
|
|
||||||
|
|
||||||
if (-1 == xioctl(fd, VIDIOC_QUERYCAP, &cap)) {
|
|
||||||
if (EINVAL == errno) {
|
|
||||||
fprintf(stderr, "%s is no V4L2 device\n",
|
|
||||||
dev_name);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
} else {
|
|
||||||
errno_exit("VIDIOC_QUERYCAP");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE)) {
|
|
||||||
fprintf(stderr, "%s is no video capture device\n",
|
|
||||||
dev_name);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (io) {
|
|
||||||
case IO_METHOD_READ:
|
|
||||||
if (!(cap.capabilities & V4L2_CAP_READWRITE)) {
|
|
||||||
fprintf(stderr, "%s does not support read i/o\n",
|
|
||||||
dev_name);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IO_METHOD_MMAP:
|
|
||||||
case IO_METHOD_USERPTR:
|
|
||||||
if (!(cap.capabilities & V4L2_CAP_STREAMING)) {
|
|
||||||
fprintf(stderr, "%s does not support streaming i/o\n",
|
|
||||||
dev_name);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Select video input, video standard and tune here. */
|
|
||||||
|
|
||||||
|
|
||||||
CLEAR(cropcap);
|
|
||||||
|
|
||||||
cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
|
||||||
|
|
||||||
if (0 == xioctl(fd, VIDIOC_CROPCAP, &cropcap)) {
|
|
||||||
crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
|
||||||
crop.c = cropcap.defrect; /* reset to default */
|
|
||||||
|
|
||||||
if (-1 == xioctl(fd, VIDIOC_S_CROP, &crop)) {
|
|
||||||
switch (errno) {
|
|
||||||
case EINVAL:
|
|
||||||
/* Cropping not supported. */
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
/* Errors ignored. */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/* Errors ignored. */
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
CLEAR(fmt);
|
|
||||||
|
|
||||||
fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
|
||||||
if (force_format) {
|
|
||||||
fmt.fmt.pix.width = 640;
|
|
||||||
fmt.fmt.pix.height = 480;
|
|
||||||
fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;
|
|
||||||
fmt.fmt.pix.field = V4L2_FIELD_INTERLACED;
|
|
||||||
|
|
||||||
if (-1 == xioctl(fd, VIDIOC_S_FMT, &fmt))
|
|
||||||
errno_exit("VIDIOC_S_FMT");
|
|
||||||
|
|
||||||
/* Note VIDIOC_S_FMT may change width and height. */
|
|
||||||
} else {
|
|
||||||
/* Preserve original settings as set by v4l2-ctl for example */
|
|
||||||
if (-1 == xioctl(fd, VIDIOC_G_FMT, &fmt))
|
|
||||||
errno_exit("VIDIOC_G_FMT");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Buggy driver paranoia. */
|
|
||||||
min = fmt.fmt.pix.width * 2;
|
|
||||||
if (fmt.fmt.pix.bytesperline < min)
|
|
||||||
fmt.fmt.pix.bytesperline = min;
|
|
||||||
min = fmt.fmt.pix.bytesperline * fmt.fmt.pix.height;
|
|
||||||
if (fmt.fmt.pix.sizeimage < min)
|
|
||||||
fmt.fmt.pix.sizeimage = min;
|
|
||||||
|
|
||||||
switch (io) {
|
|
||||||
case IO_METHOD_READ:
|
|
||||||
init_read(fmt.fmt.pix.sizeimage);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IO_METHOD_MMAP:
|
|
||||||
init_mmap();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IO_METHOD_USERPTR:
|
|
||||||
init_userp(fmt.fmt.pix.sizeimage);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void close_device(void)
|
|
||||||
{
|
|
||||||
if (-1 == close(fd))
|
|
||||||
errno_exit("close");
|
|
||||||
|
|
||||||
fd = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void open_device(void)
|
|
||||||
{
|
|
||||||
struct stat st;
|
|
||||||
|
|
||||||
if (-1 == stat(dev_name, &st)) {
|
|
||||||
fprintf(stderr, "Cannot identify '%s': %d, %s\n",
|
|
||||||
dev_name, errno, strerror(errno));
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!S_ISCHR(st.st_mode)) {
|
|
||||||
fprintf(stderr, "%s is no device\n", dev_name);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
fd = open(dev_name, O_RDWR /* required */ | O_NONBLOCK, 0);
|
|
||||||
|
|
||||||
if (-1 == fd) {
|
|
||||||
fprintf(stderr, "Cannot open '%s': %d, %s\n",
|
|
||||||
dev_name, errno, strerror(errno));
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void usage(FILE *fp, int argc, char **argv)
|
|
||||||
{
|
|
||||||
fprintf(fp,
|
|
||||||
"Usage: %s [options]\n\n"
|
|
||||||
"Version 1.3\n"
|
|
||||||
"Options:\n"
|
|
||||||
"-d | --device name Video device name [%s]\n"
|
|
||||||
"-h | --help Print this message\n"
|
|
||||||
"-m | --mmap Use memory mapped buffers [default]\n"
|
|
||||||
"-r | --read Use read() calls\n"
|
|
||||||
"-u | --userp Use application allocated buffers\n"
|
|
||||||
"-o | --output Outputs stream to stdout\n"
|
|
||||||
"-f | --format Force format to 640x480 YUYV\n"
|
|
||||||
"-c | --count Number of frames to grab [%i]\n"
|
|
||||||
"",
|
|
||||||
argv[0], dev_name, frame_count);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const char short_options[] = "d:hmruofc:";
|
|
||||||
|
|
||||||
static const struct option
|
|
||||||
long_options[] = {
|
|
||||||
{ "device", required_argument, NULL, 'd' },
|
|
||||||
{ "help", no_argument, NULL, 'h' },
|
|
||||||
{ "mmap", no_argument, NULL, 'm' },
|
|
||||||
{ "read", no_argument, NULL, 'r' },
|
|
||||||
{ "userp", no_argument, NULL, 'u' },
|
|
||||||
{ "output", no_argument, NULL, 'o' },
|
|
||||||
{ "format", no_argument, NULL, 'f' },
|
|
||||||
{ "count", required_argument, NULL, 'c' },
|
|
||||||
{ 0, 0, 0, 0 }
|
|
||||||
};
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
dev_name = "/dev/video0";
|
|
||||||
|
|
||||||
for (;;) {
|
|
||||||
int idx;
|
|
||||||
int c;
|
|
||||||
|
|
||||||
c = getopt_long(argc, argv,
|
|
||||||
short_options, long_options, &idx);
|
|
||||||
|
|
||||||
if (-1 == c)
|
|
||||||
break;
|
|
||||||
|
|
||||||
switch (c) {
|
|
||||||
case 0: /* getopt_long() flag */
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'd':
|
|
||||||
dev_name = optarg;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'h':
|
|
||||||
usage(stdout, argc, argv);
|
|
||||||
exit(EXIT_SUCCESS);
|
|
||||||
|
|
||||||
case 'm':
|
|
||||||
io = IO_METHOD_MMAP;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'r':
|
|
||||||
io = IO_METHOD_READ;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'u':
|
|
||||||
io = IO_METHOD_USERPTR;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'o':
|
|
||||||
out_buf++;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'f':
|
|
||||||
force_format++;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'c':
|
|
||||||
errno = 0;
|
|
||||||
frame_count = strtol(optarg, NULL, 0);
|
|
||||||
if (errno)
|
|
||||||
errno_exit(optarg);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
usage(stderr, argc, argv);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
open_device();
|
|
||||||
init_device();
|
|
||||||
start_capturing();
|
|
||||||
mainloop();
|
|
||||||
stop_capturing();
|
|
||||||
uninit_device();
|
|
||||||
close_device();
|
|
||||||
fprintf(stderr, "\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
</programlisting>
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,110 +0,0 @@
|
|||||||
<title>Video Capture Interface</title>
|
|
||||||
|
|
||||||
<para>Video capture devices sample an analog video signal and store
|
|
||||||
the digitized images in memory. Today nearly all devices can capture
|
|
||||||
at full 25 or 30 frames/second. With this interface applications can
|
|
||||||
control the capture process and move images from the driver into user
|
|
||||||
space.</para>
|
|
||||||
|
|
||||||
<para>Conventionally V4L2 video capture devices are accessed through
|
|
||||||
character device special files named <filename>/dev/video</filename>
|
|
||||||
and <filename>/dev/video0</filename> to
|
|
||||||
<filename>/dev/video63</filename> with major number 81 and minor
|
|
||||||
numbers 0 to 63. <filename>/dev/video</filename> is typically a
|
|
||||||
symbolic link to the preferred video device. Note the same device
|
|
||||||
files are used for video output devices.</para>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Querying Capabilities</title>
|
|
||||||
|
|
||||||
<para>Devices supporting the video capture interface set the
|
|
||||||
<constant>V4L2_CAP_VIDEO_CAPTURE</constant> or
|
|
||||||
<constant>V4L2_CAP_VIDEO_CAPTURE_MPLANE</constant> flag in the
|
|
||||||
<structfield>capabilities</structfield> field of &v4l2-capability;
|
|
||||||
returned by the &VIDIOC-QUERYCAP; ioctl. As secondary device functions
|
|
||||||
they may also support the <link linkend="overlay">video overlay</link>
|
|
||||||
(<constant>V4L2_CAP_VIDEO_OVERLAY</constant>) and the <link
|
|
||||||
linkend="raw-vbi">raw VBI capture</link>
|
|
||||||
(<constant>V4L2_CAP_VBI_CAPTURE</constant>) interface. At least one of
|
|
||||||
the read/write or streaming I/O methods must be supported. Tuners and
|
|
||||||
audio inputs are optional.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Supplemental Functions</title>
|
|
||||||
|
|
||||||
<para>Video capture devices shall support <link
|
|
||||||
linkend="audio">audio input</link>, <link
|
|
||||||
linkend="tuner">tuner</link>, <link linkend="control">controls</link>,
|
|
||||||
<link linkend="crop">cropping and scaling</link> and <link
|
|
||||||
linkend="streaming-par">streaming parameter</link> ioctls as needed.
|
|
||||||
The <link linkend="video">video input</link> and <link
|
|
||||||
linkend="standard">video standard</link> ioctls must be supported by
|
|
||||||
all video capture devices.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Image Format Negotiation</title>
|
|
||||||
|
|
||||||
<para>The result of a capture operation is determined by
|
|
||||||
cropping and image format parameters. The former select an area of the
|
|
||||||
video picture to capture, the latter how images are stored in memory,
|
|
||||||
&ie; in RGB or YUV format, the number of bits per pixel or width and
|
|
||||||
height. Together they also define how images are scaled in the
|
|
||||||
process.</para>
|
|
||||||
|
|
||||||
<para>As usual these parameters are <emphasis>not</emphasis> reset
|
|
||||||
at &func-open; time to permit Unix tool chains, programming a device
|
|
||||||
and then reading from it as if it was a plain file. Well written V4L2
|
|
||||||
applications ensure they really get what they want, including cropping
|
|
||||||
and scaling.</para>
|
|
||||||
|
|
||||||
<para>Cropping initialization at minimum requires to reset the
|
|
||||||
parameters to defaults. An example is given in <xref
|
|
||||||
linkend="crop" />.</para>
|
|
||||||
|
|
||||||
<para>To query the current image format applications set the
|
|
||||||
<structfield>type</structfield> field of a &v4l2-format; to
|
|
||||||
<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant> or
|
|
||||||
<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE</constant> and call the
|
|
||||||
&VIDIOC-G-FMT; ioctl with a pointer to this structure. Drivers fill
|
|
||||||
the &v4l2-pix-format; <structfield>pix</structfield> or the
|
|
||||||
&v4l2-pix-format-mplane; <structfield>pix_mp</structfield> member of the
|
|
||||||
<structfield>fmt</structfield> union.</para>
|
|
||||||
|
|
||||||
<para>To request different parameters applications set the
|
|
||||||
<structfield>type</structfield> field of a &v4l2-format; as above and
|
|
||||||
initialize all fields of the &v4l2-pix-format;
|
|
||||||
<structfield>vbi</structfield> member of the
|
|
||||||
<structfield>fmt</structfield> union, or better just modify the
|
|
||||||
results of <constant>VIDIOC_G_FMT</constant>, and call the
|
|
||||||
&VIDIOC-S-FMT; ioctl with a pointer to this structure. Drivers may
|
|
||||||
adjust the parameters and finally return the actual parameters as
|
|
||||||
<constant>VIDIOC_G_FMT</constant> does.</para>
|
|
||||||
|
|
||||||
<para>Like <constant>VIDIOC_S_FMT</constant> the
|
|
||||||
&VIDIOC-TRY-FMT; ioctl can be used to learn about hardware limitations
|
|
||||||
without disabling I/O or possibly time consuming hardware
|
|
||||||
preparations.</para>
|
|
||||||
|
|
||||||
<para>The contents of &v4l2-pix-format; and &v4l2-pix-format-mplane;
|
|
||||||
are discussed in <xref linkend="pixfmt" />. See also the specification of the
|
|
||||||
<constant>VIDIOC_G_FMT</constant>, <constant>VIDIOC_S_FMT</constant>
|
|
||||||
and <constant>VIDIOC_TRY_FMT</constant> ioctls for details. Video
|
|
||||||
capture devices must implement both the
|
|
||||||
<constant>VIDIOC_G_FMT</constant> and
|
|
||||||
<constant>VIDIOC_S_FMT</constant> ioctl, even if
|
|
||||||
<constant>VIDIOC_S_FMT</constant> ignores all requests and always
|
|
||||||
returns default parameters as <constant>VIDIOC_G_FMT</constant> does.
|
|
||||||
<constant>VIDIOC_TRY_FMT</constant> is optional.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Reading Images</title>
|
|
||||||
|
|
||||||
<para>A video capture device may support the <link
|
|
||||||
linkend="rw">read() function</link> and/or streaming (<link
|
|
||||||
linkend="mmap">memory mapping</link> or <link
|
|
||||||
linkend="userp">user pointer</link>) I/O. See <xref
|
|
||||||
linkend="io" /> for details.</para>
|
|
||||||
</section>
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
<title>Codec Interface</title>
|
|
||||||
|
|
||||||
<para>A V4L2 codec can compress, decompress, transform, or otherwise
|
|
||||||
convert video data from one format into another format, in memory. Typically
|
|
||||||
such devices are memory-to-memory devices (i.e. devices with the
|
|
||||||
<constant>V4L2_CAP_VIDEO_M2M</constant> or <constant>V4L2_CAP_VIDEO_M2M_MPLANE</constant>
|
|
||||||
capability set).
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>A memory-to-memory video node acts just like a normal video node, but it
|
|
||||||
supports both output (sending frames from memory to the codec hardware) and
|
|
||||||
capture (receiving the processed frames from the codec hardware into memory)
|
|
||||||
stream I/O. An application will have to setup the stream
|
|
||||||
I/O for both sides and finally call &VIDIOC-STREAMON; for both capture and output
|
|
||||||
to start the codec.</para>
|
|
||||||
|
|
||||||
<para>Video compression codecs use the MPEG controls to setup their codec parameters
|
|
||||||
(note that the MPEG controls actually support many more codecs than just MPEG).
|
|
||||||
See <xref linkend="mpeg-controls"></xref>.</para>
|
|
||||||
|
|
||||||
<para>Memory-to-memory devices can often be used as a shared resource: you can
|
|
||||||
open the video node multiple times, each application setting up their own codec properties
|
|
||||||
that are local to the file handle, and each can use it independently from the others.
|
|
||||||
The driver will arbitrate access to the codec and reprogram it whenever another file
|
|
||||||
handler gets access. This is different from the usual video node behavior where the video properties
|
|
||||||
are global to the device (i.e. changing something through one file handle is visible
|
|
||||||
through another file handle).</para>
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
<title>Effect Devices Interface</title>
|
|
||||||
|
|
||||||
<note>
|
|
||||||
<title>Suspended</title>
|
|
||||||
|
|
||||||
<para>This interface has been be suspended from the V4L2 API
|
|
||||||
implemented in Linux 2.6 until we have more experience with effect
|
|
||||||
device interfaces.</para>
|
|
||||||
</note>
|
|
||||||
|
|
||||||
<para>A V4L2 video effect device can do image effects, filtering, or
|
|
||||||
combine two or more images or image streams. For example video
|
|
||||||
transitions or wipes. Applications send data to be processed and
|
|
||||||
receive the result data either with &func-read; and &func-write;
|
|
||||||
functions, or through the streaming I/O mechanism.</para>
|
|
||||||
|
|
||||||
<para>[to do]</para>
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
<title>Event Interface</title>
|
|
||||||
|
|
||||||
<para>The V4L2 event interface provides a means for a user to get
|
|
||||||
immediately notified on certain conditions taking place on a device.
|
|
||||||
This might include start of frame or loss of signal events, for
|
|
||||||
example. Changes in the value or state of a V4L2 control can also be
|
|
||||||
reported through events.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>To receive events, the events the user is interested in first must
|
|
||||||
be subscribed using the &VIDIOC-SUBSCRIBE-EVENT; ioctl. Once an event is
|
|
||||||
subscribed, the events of subscribed types are dequeueable using the
|
|
||||||
&VIDIOC-DQEVENT; ioctl. Events may be unsubscribed using
|
|
||||||
VIDIOC_UNSUBSCRIBE_EVENT ioctl. The special event type V4L2_EVENT_ALL may
|
|
||||||
be used to unsubscribe all the events the driver supports.</para>
|
|
||||||
|
|
||||||
<para>The event subscriptions and event queues are specific to file
|
|
||||||
handles. Subscribing an event on one file handle does not affect
|
|
||||||
other file handles.</para>
|
|
||||||
|
|
||||||
<para>The information on dequeueable events is obtained by using select or
|
|
||||||
poll system calls on video devices. The V4L2 events use POLLPRI events on
|
|
||||||
poll system call and exceptions on select system call.</para>
|
|
||||||
|
|
||||||
<para>Starting with kernel 3.1 certain guarantees can be given with
|
|
||||||
regards to events:<orderedlist>
|
|
||||||
<listitem>
|
|
||||||
<para>Each subscribed event has its own internal dedicated event queue.
|
|
||||||
This means that flooding of one event type will not interfere with other
|
|
||||||
event types.</para>
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
|
||||||
<para>If the internal event queue for a particular subscribed event
|
|
||||||
becomes full, then the oldest event in that queue will be dropped.</para>
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
|
||||||
<para>Where applicable, certain event types can ensure that the payload
|
|
||||||
of the oldest event that is about to be dropped will be merged with the payload
|
|
||||||
of the next oldest event. Thus ensuring that no information is lost, but only an
|
|
||||||
intermediate step leading up to that information. See the documentation for the
|
|
||||||
event you want to subscribe to whether this is applicable for that event or not.</para>
|
|
||||||
</listitem>
|
|
||||||
</orderedlist></para>
|
|
||||||
@@ -1,149 +0,0 @@
|
|||||||
<title>Video Output Overlay Interface</title>
|
|
||||||
<subtitle>Also known as On-Screen Display (OSD)</subtitle>
|
|
||||||
|
|
||||||
<para>Some video output devices can overlay a framebuffer image onto
|
|
||||||
the outgoing video signal. Applications can set up such an overlay
|
|
||||||
using this interface, which borrows structures and ioctls of the <link
|
|
||||||
linkend="overlay">Video Overlay</link> interface.</para>
|
|
||||||
|
|
||||||
<para>The OSD function is accessible through the same character
|
|
||||||
special file as the <link linkend="capture">Video Output</link> function.
|
|
||||||
Note the default function of such a <filename>/dev/video</filename> device
|
|
||||||
is video capturing or output. The OSD function is only available after
|
|
||||||
calling the &VIDIOC-S-FMT; ioctl.</para>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Querying Capabilities</title>
|
|
||||||
|
|
||||||
<para>Devices supporting the <wordasword>Video Output
|
|
||||||
Overlay</wordasword> interface set the
|
|
||||||
<constant>V4L2_CAP_VIDEO_OUTPUT_OVERLAY</constant> flag in the
|
|
||||||
<structfield>capabilities</structfield> field of &v4l2-capability;
|
|
||||||
returned by the &VIDIOC-QUERYCAP; ioctl.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Framebuffer</title>
|
|
||||||
|
|
||||||
<para>Contrary to the <wordasword>Video Overlay</wordasword>
|
|
||||||
interface the framebuffer is normally implemented on the TV card and
|
|
||||||
not the graphics card. On Linux it is accessible as a framebuffer
|
|
||||||
device (<filename>/dev/fbN</filename>). Given a V4L2 device,
|
|
||||||
applications can find the corresponding framebuffer device by calling
|
|
||||||
the &VIDIOC-G-FBUF; ioctl. It returns, amongst other information, the
|
|
||||||
physical address of the framebuffer in the
|
|
||||||
<structfield>base</structfield> field of &v4l2-framebuffer;. The
|
|
||||||
framebuffer device ioctl <constant>FBIOGET_FSCREENINFO</constant>
|
|
||||||
returns the same address in the <structfield>smem_start</structfield>
|
|
||||||
field of struct <structname>fb_fix_screeninfo</structname>. The
|
|
||||||
<constant>FBIOGET_FSCREENINFO</constant> ioctl and struct
|
|
||||||
<structname>fb_fix_screeninfo</structname> are defined in the
|
|
||||||
<filename>linux/fb.h</filename> header file.</para>
|
|
||||||
|
|
||||||
<para>The width and height of the framebuffer depends on the
|
|
||||||
current video standard. A V4L2 driver may reject attempts to change
|
|
||||||
the video standard (or any other ioctl which would imply a framebuffer
|
|
||||||
size change) with an &EBUSY; until all applications closed the
|
|
||||||
framebuffer device.</para>
|
|
||||||
|
|
||||||
<example>
|
|
||||||
<title>Finding a framebuffer device for OSD</title>
|
|
||||||
|
|
||||||
<programlisting>
|
|
||||||
#include <linux/fb.h>
|
|
||||||
|
|
||||||
&v4l2-framebuffer; fbuf;
|
|
||||||
unsigned int i;
|
|
||||||
int fb_fd;
|
|
||||||
|
|
||||||
if (-1 == ioctl(fd, VIDIOC_G_FBUF, &fbuf)) {
|
|
||||||
perror("VIDIOC_G_FBUF");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < 30; i++) {
|
|
||||||
char dev_name[16];
|
|
||||||
struct fb_fix_screeninfo si;
|
|
||||||
|
|
||||||
snprintf(dev_name, sizeof(dev_name), "/dev/fb%u", i);
|
|
||||||
|
|
||||||
fb_fd = open(dev_name, O_RDWR);
|
|
||||||
if (-1 == fb_fd) {
|
|
||||||
switch (errno) {
|
|
||||||
case ENOENT: /* no such file */
|
|
||||||
case ENXIO: /* no driver */
|
|
||||||
continue;
|
|
||||||
|
|
||||||
default:
|
|
||||||
perror("open");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (0 == ioctl(fb_fd, FBIOGET_FSCREENINFO, &si)) {
|
|
||||||
if (si.smem_start == (unsigned long)fbuf.base)
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
/* Apparently not a framebuffer device. */
|
|
||||||
}
|
|
||||||
|
|
||||||
close(fb_fd);
|
|
||||||
fb_fd = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* fb_fd is the file descriptor of the framebuffer device
|
|
||||||
for the video output overlay, or -1 if no device was found. */
|
|
||||||
</programlisting>
|
|
||||||
</example>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Overlay Window and Scaling</title>
|
|
||||||
|
|
||||||
<para>The overlay is controlled by source and target rectangles.
|
|
||||||
The source rectangle selects a subsection of the framebuffer image to
|
|
||||||
be overlaid, the target rectangle an area in the outgoing video signal
|
|
||||||
where the image will appear. Drivers may or may not support scaling,
|
|
||||||
and arbitrary sizes and positions of these rectangles. Further drivers
|
|
||||||
may support any (or none) of the clipping/blending methods defined for
|
|
||||||
the <link linkend="overlay">Video Overlay</link> interface.</para>
|
|
||||||
|
|
||||||
<para>A &v4l2-window; defines the size of the source rectangle,
|
|
||||||
its position in the framebuffer and the clipping/blending method to be
|
|
||||||
used for the overlay. To get the current parameters applications set
|
|
||||||
the <structfield>type</structfield> field of a &v4l2-format; to
|
|
||||||
<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY</constant> and call the
|
|
||||||
&VIDIOC-G-FMT; ioctl. The driver fills the
|
|
||||||
<structname>v4l2_window</structname> substructure named
|
|
||||||
<structfield>win</structfield>. It is not possible to retrieve a
|
|
||||||
previously programmed clipping list or bitmap.</para>
|
|
||||||
|
|
||||||
<para>To program the source rectangle applications set the
|
|
||||||
<structfield>type</structfield> field of a &v4l2-format; to
|
|
||||||
<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY</constant>, initialize
|
|
||||||
the <structfield>win</structfield> substructure and call the
|
|
||||||
&VIDIOC-S-FMT; ioctl. The driver adjusts the parameters against
|
|
||||||
hardware limits and returns the actual parameters as
|
|
||||||
<constant>VIDIOC_G_FMT</constant> does. Like
|
|
||||||
<constant>VIDIOC_S_FMT</constant>, the &VIDIOC-TRY-FMT; ioctl can be
|
|
||||||
used to learn about driver capabilities without actually changing
|
|
||||||
driver state. Unlike <constant>VIDIOC_S_FMT</constant> this also works
|
|
||||||
after the overlay has been enabled.</para>
|
|
||||||
|
|
||||||
<para>A &v4l2-crop; defines the size and position of the target
|
|
||||||
rectangle. The scaling factor of the overlay is implied by the width
|
|
||||||
and height given in &v4l2-window; and &v4l2-crop;. The cropping API
|
|
||||||
applies to <wordasword>Video Output</wordasword> and <wordasword>Video
|
|
||||||
Output Overlay</wordasword> devices in the same way as to
|
|
||||||
<wordasword>Video Capture</wordasword> and <wordasword>Video
|
|
||||||
Overlay</wordasword> devices, merely reversing the direction of the
|
|
||||||
data flow. For more information see <xref linkend="crop" />.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Enabling Overlay</title>
|
|
||||||
|
|
||||||
<para>There is no V4L2 ioctl to enable or disable the overlay,
|
|
||||||
however the framebuffer interface of the driver may support the
|
|
||||||
<constant>FBIOBLANK</constant> ioctl.</para>
|
|
||||||
</section>
|
|
||||||
@@ -1,106 +0,0 @@
|
|||||||
<title>Video Output Interface</title>
|
|
||||||
|
|
||||||
<para>Video output devices encode stills or image sequences as
|
|
||||||
analog video signal. With this interface applications can
|
|
||||||
control the encoding process and move images from user space to
|
|
||||||
the driver.</para>
|
|
||||||
|
|
||||||
<para>Conventionally V4L2 video output devices are accessed through
|
|
||||||
character device special files named <filename>/dev/video</filename>
|
|
||||||
and <filename>/dev/video0</filename> to
|
|
||||||
<filename>/dev/video63</filename> with major number 81 and minor
|
|
||||||
numbers 0 to 63. <filename>/dev/video</filename> is typically a
|
|
||||||
symbolic link to the preferred video device. Note the same device
|
|
||||||
files are used for video capture devices.</para>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Querying Capabilities</title>
|
|
||||||
|
|
||||||
<para>Devices supporting the video output interface set the
|
|
||||||
<constant>V4L2_CAP_VIDEO_OUTPUT</constant> or
|
|
||||||
<constant>V4L2_CAP_VIDEO_OUTPUT_MPLANE</constant> flag in the
|
|
||||||
<structfield>capabilities</structfield> field of &v4l2-capability;
|
|
||||||
returned by the &VIDIOC-QUERYCAP; ioctl. As secondary device functions
|
|
||||||
they may also support the <link linkend="raw-vbi">raw VBI
|
|
||||||
output</link> (<constant>V4L2_CAP_VBI_OUTPUT</constant>) interface. At
|
|
||||||
least one of the read/write or streaming I/O methods must be
|
|
||||||
supported. Modulators and audio outputs are optional.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Supplemental Functions</title>
|
|
||||||
|
|
||||||
<para>Video output devices shall support <link
|
|
||||||
linkend="audio">audio output</link>, <link
|
|
||||||
linkend="tuner">modulator</link>, <link linkend="control">controls</link>,
|
|
||||||
<link linkend="crop">cropping and scaling</link> and <link
|
|
||||||
linkend="streaming-par">streaming parameter</link> ioctls as needed.
|
|
||||||
The <link linkend="video">video output</link> and <link
|
|
||||||
linkend="standard">video standard</link> ioctls must be supported by
|
|
||||||
all video output devices.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Image Format Negotiation</title>
|
|
||||||
|
|
||||||
<para>The output is determined by cropping and image format
|
|
||||||
parameters. The former select an area of the video picture where the
|
|
||||||
image will appear, the latter how images are stored in memory, &ie; in
|
|
||||||
RGB or YUV format, the number of bits per pixel or width and height.
|
|
||||||
Together they also define how images are scaled in the process.</para>
|
|
||||||
|
|
||||||
<para>As usual these parameters are <emphasis>not</emphasis> reset
|
|
||||||
at &func-open; time to permit Unix tool chains, programming a device
|
|
||||||
and then writing to it as if it was a plain file. Well written V4L2
|
|
||||||
applications ensure they really get what they want, including cropping
|
|
||||||
and scaling.</para>
|
|
||||||
|
|
||||||
<para>Cropping initialization at minimum requires to reset the
|
|
||||||
parameters to defaults. An example is given in <xref
|
|
||||||
linkend="crop" />.</para>
|
|
||||||
|
|
||||||
<para>To query the current image format applications set the
|
|
||||||
<structfield>type</structfield> field of a &v4l2-format; to
|
|
||||||
<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant> or
|
|
||||||
<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE</constant> and call the
|
|
||||||
&VIDIOC-G-FMT; ioctl with a pointer to this structure. Drivers fill
|
|
||||||
the &v4l2-pix-format; <structfield>pix</structfield> or the
|
|
||||||
&v4l2-pix-format-mplane; <structfield>pix_mp</structfield> member of the
|
|
||||||
<structfield>fmt</structfield> union.</para>
|
|
||||||
|
|
||||||
<para>To request different parameters applications set the
|
|
||||||
<structfield>type</structfield> field of a &v4l2-format; as above and
|
|
||||||
initialize all fields of the &v4l2-pix-format;
|
|
||||||
<structfield>vbi</structfield> member of the
|
|
||||||
<structfield>fmt</structfield> union, or better just modify the
|
|
||||||
results of <constant>VIDIOC_G_FMT</constant>, and call the
|
|
||||||
&VIDIOC-S-FMT; ioctl with a pointer to this structure. Drivers may
|
|
||||||
adjust the parameters and finally return the actual parameters as
|
|
||||||
<constant>VIDIOC_G_FMT</constant> does.</para>
|
|
||||||
|
|
||||||
<para>Like <constant>VIDIOC_S_FMT</constant> the
|
|
||||||
&VIDIOC-TRY-FMT; ioctl can be used to learn about hardware limitations
|
|
||||||
without disabling I/O or possibly time consuming hardware
|
|
||||||
preparations.</para>
|
|
||||||
|
|
||||||
<para>The contents of &v4l2-pix-format; and &v4l2-pix-format-mplane;
|
|
||||||
are discussed in <xref linkend="pixfmt" />. See also the specification of the
|
|
||||||
<constant>VIDIOC_G_FMT</constant>, <constant>VIDIOC_S_FMT</constant>
|
|
||||||
and <constant>VIDIOC_TRY_FMT</constant> ioctls for details. Video
|
|
||||||
output devices must implement both the
|
|
||||||
<constant>VIDIOC_G_FMT</constant> and
|
|
||||||
<constant>VIDIOC_S_FMT</constant> ioctl, even if
|
|
||||||
<constant>VIDIOC_S_FMT</constant> ignores all requests and always
|
|
||||||
returns default parameters as <constant>VIDIOC_G_FMT</constant> does.
|
|
||||||
<constant>VIDIOC_TRY_FMT</constant> is optional.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Writing Images</title>
|
|
||||||
|
|
||||||
<para>A video output device may support the <link
|
|
||||||
linkend="rw">write() function</link> and/or streaming (<link
|
|
||||||
linkend="mmap">memory mapping</link> or <link
|
|
||||||
linkend="userp">user pointer</link>) I/O. See <xref
|
|
||||||
linkend="io" /> for details.</para>
|
|
||||||
</section>
|
|
||||||
@@ -1,368 +0,0 @@
|
|||||||
<title>Video Overlay Interface</title>
|
|
||||||
<subtitle>Also known as Framebuffer Overlay or Previewing</subtitle>
|
|
||||||
|
|
||||||
<para>Video overlay devices have the ability to genlock (TV-)video
|
|
||||||
into the (VGA-)video signal of a graphics card, or to store captured
|
|
||||||
images directly in video memory of a graphics card, typically with
|
|
||||||
clipping. This can be considerable more efficient than capturing
|
|
||||||
images and displaying them by other means. In the old days when only
|
|
||||||
nuclear power plants needed cooling towers this used to be the only
|
|
||||||
way to put live video into a window.</para>
|
|
||||||
|
|
||||||
<para>Video overlay devices are accessed through the same character
|
|
||||||
special files as <link linkend="capture">video capture</link> devices.
|
|
||||||
Note the default function of a <filename>/dev/video</filename> device
|
|
||||||
is video capturing. The overlay function is only available after
|
|
||||||
calling the &VIDIOC-S-FMT; ioctl.</para>
|
|
||||||
|
|
||||||
<para>The driver may support simultaneous overlay and capturing
|
|
||||||
using the read/write and streaming I/O methods. If so, operation at
|
|
||||||
the nominal frame rate of the video standard is not guaranteed. Frames
|
|
||||||
may be directed away from overlay to capture, or one field may be used
|
|
||||||
for overlay and the other for capture if the capture parameters permit
|
|
||||||
this.</para>
|
|
||||||
|
|
||||||
<para>Applications should use different file descriptors for
|
|
||||||
capturing and overlay. This must be supported by all drivers capable
|
|
||||||
of simultaneous capturing and overlay. Optionally these drivers may
|
|
||||||
also permit capturing and overlay with a single file descriptor for
|
|
||||||
compatibility with V4L and earlier versions of V4L2.<footnote>
|
|
||||||
<para>A common application of two file descriptors is the
|
|
||||||
XFree86 <link linkend="xvideo">Xv/V4L</link> interface driver and
|
|
||||||
a V4L2 application. While the X server controls video overlay, the
|
|
||||||
application can take advantage of memory mapping and DMA.</para>
|
|
||||||
<para>In the opinion of the designers of this API, no driver
|
|
||||||
writer taking the efforts to support simultaneous capturing and
|
|
||||||
overlay will restrict this ability by requiring a single file
|
|
||||||
descriptor, as in V4L and earlier versions of V4L2. Making this
|
|
||||||
optional means applications depending on two file descriptors need
|
|
||||||
backup routines to be compatible with all drivers, which is
|
|
||||||
considerable more work than using two fds in applications which do
|
|
||||||
not. Also two fd's fit the general concept of one file descriptor for
|
|
||||||
each logical stream. Hence as a complexity trade-off drivers
|
|
||||||
<emphasis>must</emphasis> support two file descriptors and
|
|
||||||
<emphasis>may</emphasis> support single fd operation.</para>
|
|
||||||
</footnote></para>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Querying Capabilities</title>
|
|
||||||
|
|
||||||
<para>Devices supporting the video overlay interface set the
|
|
||||||
<constant>V4L2_CAP_VIDEO_OVERLAY</constant> flag in the
|
|
||||||
<structfield>capabilities</structfield> field of &v4l2-capability;
|
|
||||||
returned by the &VIDIOC-QUERYCAP; ioctl. The overlay I/O method specified
|
|
||||||
below must be supported. Tuners and audio inputs are optional.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Supplemental Functions</title>
|
|
||||||
|
|
||||||
<para>Video overlay devices shall support <link
|
|
||||||
linkend="audio">audio input</link>, <link
|
|
||||||
linkend="tuner">tuner</link>, <link linkend="control">controls</link>,
|
|
||||||
<link linkend="crop">cropping and scaling</link> and <link
|
|
||||||
linkend="streaming-par">streaming parameter</link> ioctls as needed.
|
|
||||||
The <link linkend="video">video input</link> and <link
|
|
||||||
linkend="standard">video standard</link> ioctls must be supported by
|
|
||||||
all video overlay devices.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Setup</title>
|
|
||||||
|
|
||||||
<para>Before overlay can commence applications must program the
|
|
||||||
driver with frame buffer parameters, namely the address and size of
|
|
||||||
the frame buffer and the image format, for example RGB 5:6:5. The
|
|
||||||
&VIDIOC-G-FBUF; and &VIDIOC-S-FBUF; ioctls are available to get
|
|
||||||
and set these parameters, respectively. The
|
|
||||||
<constant>VIDIOC_S_FBUF</constant> ioctl is privileged because it
|
|
||||||
allows to set up DMA into physical memory, bypassing the memory
|
|
||||||
protection mechanisms of the kernel. Only the superuser can change the
|
|
||||||
frame buffer address and size. Users are not supposed to run TV
|
|
||||||
applications as root or with SUID bit set. A small helper application
|
|
||||||
with suitable privileges should query the graphics system and program
|
|
||||||
the V4L2 driver at the appropriate time.</para>
|
|
||||||
|
|
||||||
<para>Some devices add the video overlay to the output signal
|
|
||||||
of the graphics card. In this case the frame buffer is not modified by
|
|
||||||
the video device, and the frame buffer address and pixel format are
|
|
||||||
not needed by the driver. The <constant>VIDIOC_S_FBUF</constant> ioctl
|
|
||||||
is not privileged. An application can check for this type of device by
|
|
||||||
calling the <constant>VIDIOC_G_FBUF</constant> ioctl.</para>
|
|
||||||
|
|
||||||
<para>A driver may support any (or none) of five clipping/blending
|
|
||||||
methods:<orderedlist>
|
|
||||||
<listitem>
|
|
||||||
<para>Chroma-keying displays the overlaid image only where
|
|
||||||
pixels in the primary graphics surface assume a certain color.</para>
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
|
||||||
<para>A bitmap can be specified where each bit corresponds
|
|
||||||
to a pixel in the overlaid image. When the bit is set, the
|
|
||||||
corresponding video pixel is displayed, otherwise a pixel of the
|
|
||||||
graphics surface.</para>
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
|
||||||
<para>A list of clipping rectangles can be specified. In
|
|
||||||
these regions <emphasis>no</emphasis> video is displayed, so the
|
|
||||||
graphics surface can be seen here.</para>
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
|
||||||
<para>The framebuffer has an alpha channel that can be used
|
|
||||||
to clip or blend the framebuffer with the video.</para>
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
|
||||||
<para>A global alpha value can be specified to blend the
|
|
||||||
framebuffer contents with video images.</para>
|
|
||||||
</listitem>
|
|
||||||
</orderedlist></para>
|
|
||||||
|
|
||||||
<para>When simultaneous capturing and overlay is supported and
|
|
||||||
the hardware prohibits different image and frame buffer formats, the
|
|
||||||
format requested first takes precedence. The attempt to capture
|
|
||||||
(&VIDIOC-S-FMT;) or overlay (&VIDIOC-S-FBUF;) may fail with an
|
|
||||||
&EBUSY; or return accordingly modified parameters..</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Overlay Window</title>
|
|
||||||
|
|
||||||
<para>The overlaid image is determined by cropping and overlay
|
|
||||||
window parameters. The former select an area of the video picture to
|
|
||||||
capture, the latter how images are overlaid and clipped. Cropping
|
|
||||||
initialization at minimum requires to reset the parameters to
|
|
||||||
defaults. An example is given in <xref linkend="crop" />.</para>
|
|
||||||
|
|
||||||
<para>The overlay window is described by a &v4l2-window;. It
|
|
||||||
defines the size of the image, its position over the graphics surface
|
|
||||||
and the clipping to be applied. To get the current parameters
|
|
||||||
applications set the <structfield>type</structfield> field of a
|
|
||||||
&v4l2-format; to <constant>V4L2_BUF_TYPE_VIDEO_OVERLAY</constant> and
|
|
||||||
call the &VIDIOC-G-FMT; ioctl. The driver fills the
|
|
||||||
<structname>v4l2_window</structname> substructure named
|
|
||||||
<structfield>win</structfield>. It is not possible to retrieve a
|
|
||||||
previously programmed clipping list or bitmap.</para>
|
|
||||||
|
|
||||||
<para>To program the overlay window applications set the
|
|
||||||
<structfield>type</structfield> field of a &v4l2-format; to
|
|
||||||
<constant>V4L2_BUF_TYPE_VIDEO_OVERLAY</constant>, initialize the
|
|
||||||
<structfield>win</structfield> substructure and call the
|
|
||||||
&VIDIOC-S-FMT; ioctl. The driver adjusts the parameters against
|
|
||||||
hardware limits and returns the actual parameters as
|
|
||||||
<constant>VIDIOC_G_FMT</constant> does. Like
|
|
||||||
<constant>VIDIOC_S_FMT</constant>, the &VIDIOC-TRY-FMT; ioctl can be
|
|
||||||
used to learn about driver capabilities without actually changing
|
|
||||||
driver state. Unlike <constant>VIDIOC_S_FMT</constant> this also works
|
|
||||||
after the overlay has been enabled.</para>
|
|
||||||
|
|
||||||
<para>The scaling factor of the overlaid image is implied by the
|
|
||||||
width and height given in &v4l2-window; and the size of the cropping
|
|
||||||
rectangle. For more information see <xref linkend="crop" />.</para>
|
|
||||||
|
|
||||||
<para>When simultaneous capturing and overlay is supported and
|
|
||||||
the hardware prohibits different image and window sizes, the size
|
|
||||||
requested first takes precedence. The attempt to capture or overlay as
|
|
||||||
well (&VIDIOC-S-FMT;) may fail with an &EBUSY; or return accordingly
|
|
||||||
modified parameters.</para>
|
|
||||||
|
|
||||||
<table pgwide="1" frame="none" id="v4l2-window">
|
|
||||||
<title>struct <structname>v4l2_window</structname></title>
|
|
||||||
<tgroup cols="3">
|
|
||||||
&cs-str;
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry>&v4l2-rect;</entry>
|
|
||||||
<entry><structfield>w</structfield></entry>
|
|
||||||
<entry>Size and position of the window relative to the
|
|
||||||
top, left corner of the frame buffer defined with &VIDIOC-S-FBUF;. The
|
|
||||||
window can extend the frame buffer width and height, the
|
|
||||||
<structfield>x</structfield> and <structfield>y</structfield>
|
|
||||||
coordinates can be negative, and it can lie completely outside the
|
|
||||||
frame buffer. The driver clips the window accordingly, or if that is
|
|
||||||
not possible, modifies its size and/or position.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>&v4l2-field;</entry>
|
|
||||||
<entry><structfield>field</structfield></entry>
|
|
||||||
<entry>Applications set this field to determine which
|
|
||||||
video field shall be overlaid, typically one of
|
|
||||||
<constant>V4L2_FIELD_ANY</constant> (0),
|
|
||||||
<constant>V4L2_FIELD_TOP</constant>,
|
|
||||||
<constant>V4L2_FIELD_BOTTOM</constant> or
|
|
||||||
<constant>V4L2_FIELD_INTERLACED</constant>. Drivers may have to choose
|
|
||||||
a different field order and return the actual setting here.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>chromakey</structfield></entry>
|
|
||||||
<entry>When chroma-keying has been negotiated with
|
|
||||||
&VIDIOC-S-FBUF; applications set this field to the desired pixel value
|
|
||||||
for the chroma key. The format is the same as the pixel format of the
|
|
||||||
framebuffer (&v4l2-framebuffer;
|
|
||||||
<structfield>fmt.pixelformat</structfield> field), with bytes in host
|
|
||||||
order. E. g. for <link
|
|
||||||
linkend="V4L2-PIX-FMT-BGR32"><constant>V4L2_PIX_FMT_BGR24</constant></link>
|
|
||||||
the value should be 0xRRGGBB on a little endian, 0xBBGGRR on a big
|
|
||||||
endian host.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>&v4l2-clip; *</entry>
|
|
||||||
<entry><structfield>clips</structfield></entry>
|
|
||||||
<entry>When chroma-keying has <emphasis>not</emphasis>
|
|
||||||
been negotiated and &VIDIOC-G-FBUF; indicated this capability,
|
|
||||||
applications can set this field to point to an array of
|
|
||||||
clipping rectangles.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>Like the window coordinates
|
|
||||||
<structfield>w</structfield>, clipping rectangles are defined relative
|
|
||||||
to the top, left corner of the frame buffer. However clipping
|
|
||||||
rectangles must not extend the frame buffer width and height, and they
|
|
||||||
must not overlap. If possible applications should merge adjacent
|
|
||||||
rectangles. Whether this must create x-y or y-x bands, or the order of
|
|
||||||
rectangles, is not defined. When clip lists are not supported the
|
|
||||||
driver ignores this field. Its contents after calling &VIDIOC-S-FMT;
|
|
||||||
are undefined.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>clipcount</structfield></entry>
|
|
||||||
<entry>When the application set the
|
|
||||||
<structfield>clips</structfield> field, this field must contain the
|
|
||||||
number of clipping rectangles in the list. When clip lists are not
|
|
||||||
supported the driver ignores this field, its contents after calling
|
|
||||||
<constant>VIDIOC_S_FMT</constant> are undefined. When clip lists are
|
|
||||||
supported but no clipping is desired this field must be set to
|
|
||||||
zero.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>void *</entry>
|
|
||||||
<entry><structfield>bitmap</structfield></entry>
|
|
||||||
<entry>When chroma-keying has
|
|
||||||
<emphasis>not</emphasis> been negotiated and &VIDIOC-G-FBUF; indicated
|
|
||||||
this capability, applications can set this field to point to a
|
|
||||||
clipping bit mask.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry spanname="hspan"><para>It must be of the same size
|
|
||||||
as the window, <structfield>w.width</structfield> and
|
|
||||||
<structfield>w.height</structfield>. Each bit corresponds to a pixel
|
|
||||||
in the overlaid image, which is displayed only when the bit is
|
|
||||||
<emphasis>set</emphasis>. Pixel coordinates translate to bits like:
|
|
||||||
<programlisting>
|
|
||||||
((__u8 *) <structfield>bitmap</structfield>)[<structfield>w.width</structfield> * y + x / 8] & (1 << (x & 7))</programlisting></para><para>where <structfield>0</structfield> ≤ x <
|
|
||||||
<structfield>w.width</structfield> and <structfield>0</structfield> ≤
|
|
||||||
y <<structfield>w.height</structfield>.<footnote>
|
|
||||||
<para>Should we require
|
|
||||||
<structfield>w.width</structfield> to be a multiple of
|
|
||||||
eight?</para>
|
|
||||||
</footnote></para><para>When a clipping
|
|
||||||
bit mask is not supported the driver ignores this field, its contents
|
|
||||||
after calling &VIDIOC-S-FMT; are undefined. When a bit mask is supported
|
|
||||||
but no clipping is desired this field must be set to
|
|
||||||
<constant>NULL</constant>.</para><para>Applications need not create a
|
|
||||||
clip list or bit mask. When they pass both, or despite negotiating
|
|
||||||
chroma-keying, the results are undefined. Regardless of the chosen
|
|
||||||
method, the clipping abilities of the hardware may be limited in
|
|
||||||
quantity or quality. The results when these limits are exceeded are
|
|
||||||
undefined.<footnote>
|
|
||||||
<para>When the image is written into frame buffer
|
|
||||||
memory it will be undesirable if the driver clips out less pixels
|
|
||||||
than expected, because the application and graphics system are not
|
|
||||||
aware these regions need to be refreshed. The driver should clip out
|
|
||||||
more pixels or not write the image at all.</para>
|
|
||||||
</footnote></para></entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u8</entry>
|
|
||||||
<entry><structfield>global_alpha</structfield></entry>
|
|
||||||
<entry>The global alpha value used to blend the
|
|
||||||
framebuffer with video images, if global alpha blending has been
|
|
||||||
negotiated (<constant>V4L2_FBUF_FLAG_GLOBAL_ALPHA</constant>, see
|
|
||||||
&VIDIOC-S-FBUF;, <xref linkend="framebuffer-flags" />).</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>Note this field was added in Linux 2.6.23, extending the structure. However
|
|
||||||
the <link linkend="vidioc-g-fmt">VIDIOC_G/S/TRY_FMT</link> ioctls,
|
|
||||||
which take a pointer to a <link
|
|
||||||
linkend="v4l2-format">v4l2_format</link> parent structure with padding
|
|
||||||
bytes at the end, are not affected.</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<table pgwide="1" frame="none" id="v4l2-clip">
|
|
||||||
<title>struct <structname>v4l2_clip</structname><footnote>
|
|
||||||
<para>The X Window system defines "regions" which are
|
|
||||||
vectors of struct BoxRec { short x1, y1, x2, y2; } with width = x2 -
|
|
||||||
x1 and height = y2 - y1, so one cannot pass X11 clip lists
|
|
||||||
directly.</para>
|
|
||||||
</footnote></title>
|
|
||||||
<tgroup cols="3">
|
|
||||||
&cs-str;
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry>&v4l2-rect;</entry>
|
|
||||||
<entry><structfield>c</structfield></entry>
|
|
||||||
<entry>Coordinates of the clipping rectangle, relative to
|
|
||||||
the top, left corner of the frame buffer. Only window pixels
|
|
||||||
<emphasis>outside</emphasis> all clipping rectangles are
|
|
||||||
displayed.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>&v4l2-clip; *</entry>
|
|
||||||
<entry><structfield>next</structfield></entry>
|
|
||||||
<entry>Pointer to the next clipping rectangle, NULL when
|
|
||||||
this is the last rectangle. Drivers ignore this field, it cannot be
|
|
||||||
used to pass a linked list of clipping rectangles.</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<!-- NB for easier reading this table is duplicated
|
|
||||||
in the vidioc-cropcap chapter.-->
|
|
||||||
|
|
||||||
<table pgwide="1" frame="none" id="v4l2-rect">
|
|
||||||
<title>struct <structname>v4l2_rect</structname></title>
|
|
||||||
<tgroup cols="3">
|
|
||||||
&cs-str;
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry>__s32</entry>
|
|
||||||
<entry><structfield>left</structfield></entry>
|
|
||||||
<entry>Horizontal offset of the top, left corner of the
|
|
||||||
rectangle, in pixels.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__s32</entry>
|
|
||||||
<entry><structfield>top</structfield></entry>
|
|
||||||
<entry>Vertical offset of the top, left corner of the
|
|
||||||
rectangle, in pixels. Offsets increase to the right and down.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>width</structfield></entry>
|
|
||||||
<entry>Width of the rectangle, in pixels.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>height</structfield></entry>
|
|
||||||
<entry>Height of the rectangle, in pixels.</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Enabling Overlay</title>
|
|
||||||
|
|
||||||
<para>To start or stop the frame buffer overlay applications call
|
|
||||||
the &VIDIOC-OVERLAY; ioctl.</para>
|
|
||||||
</section>
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
<title>Radio Interface</title>
|
|
||||||
|
|
||||||
<para>This interface is intended for AM and FM (analog) radio
|
|
||||||
receivers and transmitters.</para>
|
|
||||||
|
|
||||||
<para>Conventionally V4L2 radio devices are accessed through
|
|
||||||
character device special files named <filename>/dev/radio</filename>
|
|
||||||
and <filename>/dev/radio0</filename> to
|
|
||||||
<filename>/dev/radio63</filename> with major number 81 and minor
|
|
||||||
numbers 64 to 127.</para>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Querying Capabilities</title>
|
|
||||||
|
|
||||||
<para>Devices supporting the radio interface set the
|
|
||||||
<constant>V4L2_CAP_RADIO</constant> and
|
|
||||||
<constant>V4L2_CAP_TUNER</constant> or
|
|
||||||
<constant>V4L2_CAP_MODULATOR</constant> flag in the
|
|
||||||
<structfield>capabilities</structfield> field of &v4l2-capability;
|
|
||||||
returned by the &VIDIOC-QUERYCAP; ioctl. Other combinations of
|
|
||||||
capability flags are reserved for future extensions.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Supplemental Functions</title>
|
|
||||||
|
|
||||||
<para>Radio devices can support <link
|
|
||||||
linkend="control">controls</link>, and must support the <link
|
|
||||||
linkend="tuner">tuner or modulator</link> ioctls.</para>
|
|
||||||
|
|
||||||
<para>They do not support the video input or output, audio input
|
|
||||||
or output, video standard, cropping and scaling, compression and
|
|
||||||
streaming parameter, or overlay ioctls. All other ioctls and I/O
|
|
||||||
methods are reserved for future extensions.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Programming</title>
|
|
||||||
|
|
||||||
<para>Radio devices may have a couple audio controls (as discussed
|
|
||||||
in <xref linkend="control" />) such as a volume control, possibly custom
|
|
||||||
controls. Further all radio devices have one tuner or modulator (these are
|
|
||||||
discussed in <xref linkend="tuner" />) with index number zero to select
|
|
||||||
the radio frequency and to determine if a monaural or FM stereo
|
|
||||||
program is received/emitted. Drivers switch automatically between AM and FM
|
|
||||||
depending on the selected frequency. The &VIDIOC-G-TUNER; or
|
|
||||||
&VIDIOC-G-MODULATOR; ioctl
|
|
||||||
reports the supported frequency range.</para>
|
|
||||||
</section>
|
|
||||||
@@ -1,345 +0,0 @@
|
|||||||
<title>Raw VBI Data Interface</title>
|
|
||||||
|
|
||||||
<para>VBI is an abbreviation of Vertical Blanking Interval, a gap
|
|
||||||
in the sequence of lines of an analog video signal. During VBI
|
|
||||||
no picture information is transmitted, allowing some time while the
|
|
||||||
electron beam of a cathode ray tube TV returns to the top of the
|
|
||||||
screen. Using an oscilloscope you will find here the vertical
|
|
||||||
synchronization pulses and short data packages ASK
|
|
||||||
modulated<footnote><para>ASK: Amplitude-Shift Keying. A high signal
|
|
||||||
level represents a '1' bit, a low level a '0' bit.</para></footnote>
|
|
||||||
onto the video signal. These are transmissions of services such as
|
|
||||||
Teletext or Closed Caption.</para>
|
|
||||||
|
|
||||||
<para>Subject of this interface type is raw VBI data, as sampled off
|
|
||||||
a video signal, or to be added to a signal for output.
|
|
||||||
The data format is similar to uncompressed video images, a number of
|
|
||||||
lines times a number of samples per line, we call this a VBI image.</para>
|
|
||||||
|
|
||||||
<para>Conventionally V4L2 VBI devices are accessed through character
|
|
||||||
device special files named <filename>/dev/vbi</filename> and
|
|
||||||
<filename>/dev/vbi0</filename> to <filename>/dev/vbi31</filename> with
|
|
||||||
major number 81 and minor numbers 224 to 255.
|
|
||||||
<filename>/dev/vbi</filename> is typically a symbolic link to the
|
|
||||||
preferred VBI device. This convention applies to both input and output
|
|
||||||
devices.</para>
|
|
||||||
|
|
||||||
<para>To address the problems of finding related video and VBI
|
|
||||||
devices VBI capturing and output is also available as device function
|
|
||||||
under <filename>/dev/video</filename>. To capture or output raw VBI
|
|
||||||
data with these devices applications must call the &VIDIOC-S-FMT;
|
|
||||||
ioctl. Accessed as <filename>/dev/vbi</filename>, raw VBI capturing
|
|
||||||
or output is the default device function.</para>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Querying Capabilities</title>
|
|
||||||
|
|
||||||
<para>Devices supporting the raw VBI capturing or output API set
|
|
||||||
the <constant>V4L2_CAP_VBI_CAPTURE</constant> or
|
|
||||||
<constant>V4L2_CAP_VBI_OUTPUT</constant> flags, respectively, in the
|
|
||||||
<structfield>capabilities</structfield> field of &v4l2-capability;
|
|
||||||
returned by the &VIDIOC-QUERYCAP; ioctl. At least one of the
|
|
||||||
read/write, streaming or asynchronous I/O methods must be
|
|
||||||
supported. VBI devices may or may not have a tuner or modulator.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Supplemental Functions</title>
|
|
||||||
|
|
||||||
<para>VBI devices shall support <link linkend="video">video
|
|
||||||
input or output</link>, <link linkend="tuner">tuner or
|
|
||||||
modulator</link>, and <link linkend="control">controls</link> ioctls
|
|
||||||
as needed. The <link linkend="standard">video standard</link> ioctls provide
|
|
||||||
information vital to program a VBI device, therefore must be
|
|
||||||
supported.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Raw VBI Format Negotiation</title>
|
|
||||||
|
|
||||||
<para>Raw VBI sampling abilities can vary, in particular the
|
|
||||||
sampling frequency. To properly interpret the data V4L2 specifies an
|
|
||||||
ioctl to query the sampling parameters. Moreover, to allow for some
|
|
||||||
flexibility applications can also suggest different parameters.</para>
|
|
||||||
|
|
||||||
<para>As usual these parameters are <emphasis>not</emphasis>
|
|
||||||
reset at &func-open; time to permit Unix tool chains, programming a
|
|
||||||
device and then reading from it as if it was a plain file. Well
|
|
||||||
written V4L2 applications should always ensure they really get what
|
|
||||||
they want, requesting reasonable parameters and then checking if the
|
|
||||||
actual parameters are suitable.</para>
|
|
||||||
|
|
||||||
<para>To query the current raw VBI capture parameters
|
|
||||||
applications set the <structfield>type</structfield> field of a
|
|
||||||
&v4l2-format; to <constant>V4L2_BUF_TYPE_VBI_CAPTURE</constant> or
|
|
||||||
<constant>V4L2_BUF_TYPE_VBI_OUTPUT</constant>, and call the
|
|
||||||
&VIDIOC-G-FMT; ioctl with a pointer to this structure. Drivers fill
|
|
||||||
the &v4l2-vbi-format; <structfield>vbi</structfield> member of the
|
|
||||||
<structfield>fmt</structfield> union.</para>
|
|
||||||
|
|
||||||
<para>To request different parameters applications set the
|
|
||||||
<structfield>type</structfield> field of a &v4l2-format; as above and
|
|
||||||
initialize all fields of the &v4l2-vbi-format;
|
|
||||||
<structfield>vbi</structfield> member of the
|
|
||||||
<structfield>fmt</structfield> union, or better just modify the
|
|
||||||
results of <constant>VIDIOC_G_FMT</constant>, and call the
|
|
||||||
&VIDIOC-S-FMT; ioctl with a pointer to this structure. Drivers return
|
|
||||||
an &EINVAL; only when the given parameters are ambiguous, otherwise
|
|
||||||
they modify the parameters according to the hardware capabilities and
|
|
||||||
return the actual parameters. When the driver allocates resources at
|
|
||||||
this point, it may return an &EBUSY; to indicate the returned
|
|
||||||
parameters are valid but the required resources are currently not
|
|
||||||
available. That may happen for instance when the video and VBI areas
|
|
||||||
to capture would overlap, or when the driver supports multiple opens
|
|
||||||
and another process already requested VBI capturing or output. Anyway,
|
|
||||||
applications must expect other resource allocation points which may
|
|
||||||
return <errorcode>EBUSY</errorcode>, at the &VIDIOC-STREAMON; ioctl
|
|
||||||
and the first read(), write() and select() call.</para>
|
|
||||||
|
|
||||||
<para>VBI devices must implement both the
|
|
||||||
<constant>VIDIOC_G_FMT</constant> and
|
|
||||||
<constant>VIDIOC_S_FMT</constant> ioctl, even if
|
|
||||||
<constant>VIDIOC_S_FMT</constant> ignores all requests and always
|
|
||||||
returns default parameters as <constant>VIDIOC_G_FMT</constant> does.
|
|
||||||
<constant>VIDIOC_TRY_FMT</constant> is optional.</para>
|
|
||||||
|
|
||||||
<table pgwide="1" frame="none" id="v4l2-vbi-format">
|
|
||||||
<title>struct <structname>v4l2_vbi_format</structname></title>
|
|
||||||
<tgroup cols="3">
|
|
||||||
&cs-str;
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>sampling_rate</structfield></entry>
|
|
||||||
<entry>Samples per second, i. e. unit 1 Hz.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>offset</structfield></entry>
|
|
||||||
<entry><para>Horizontal offset of the VBI image,
|
|
||||||
relative to the leading edge of the line synchronization pulse and
|
|
||||||
counted in samples: The first sample in the VBI image will be located
|
|
||||||
<structfield>offset</structfield> /
|
|
||||||
<structfield>sampling_rate</structfield> seconds following the leading
|
|
||||||
edge. See also <xref linkend="vbi-hsync" />.</para></entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>samples_per_line</structfield></entry>
|
|
||||||
<entry></entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>sample_format</structfield></entry>
|
|
||||||
<entry><para>Defines the sample format as in <xref
|
|
||||||
linkend="pixfmt" />, a four-character-code.<footnote>
|
|
||||||
<para>A few devices may be unable to
|
|
||||||
sample VBI data at all but can extend the video capture window to the
|
|
||||||
VBI region.</para>
|
|
||||||
</footnote> Usually this is
|
|
||||||
<constant>V4L2_PIX_FMT_GREY</constant>, i. e. each sample
|
|
||||||
consists of 8 bits with lower values oriented towards the black level.
|
|
||||||
Do not assume any other correlation of values with the signal level.
|
|
||||||
For example, the MSB does not necessarily indicate if the signal is
|
|
||||||
'high' or 'low' because 128 may not be the mean value of the
|
|
||||||
signal. Drivers shall not convert the sample format by software.</para></entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>start</structfield>[2]</entry>
|
|
||||||
<entry>This is the scanning system line number
|
|
||||||
associated with the first line of the VBI image, of the first and the
|
|
||||||
second field respectively. See <xref linkend="vbi-525" /> and
|
|
||||||
<xref linkend="vbi-625" /> for valid values.
|
|
||||||
The <constant>V4L2_VBI_ITU_525_F1_START</constant>,
|
|
||||||
<constant>V4L2_VBI_ITU_525_F2_START</constant>,
|
|
||||||
<constant>V4L2_VBI_ITU_625_F1_START</constant> and
|
|
||||||
<constant>V4L2_VBI_ITU_625_F2_START</constant> defines give the start line
|
|
||||||
numbers for each field for each 525 or 625 line format as a convenience.
|
|
||||||
Don't forget that ITU line numbering starts at 1, not 0.
|
|
||||||
VBI input drivers can return start values 0 if the hardware cannot
|
|
||||||
reliable identify scanning lines, VBI acquisition may not require this
|
|
||||||
information.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>count</structfield>[2]</entry>
|
|
||||||
<entry>The number of lines in the first and second
|
|
||||||
field image, respectively.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry spanname="hspan"><para>Drivers should be as
|
|
||||||
flexibility as possible. For example, it may be possible to extend or
|
|
||||||
move the VBI capture window down to the picture area, implementing a
|
|
||||||
'full field mode' to capture data service transmissions embedded in
|
|
||||||
the picture.</para><para>An application can set the first or second
|
|
||||||
<structfield>count</structfield> value to zero if no data is required
|
|
||||||
from the respective field; <structfield>count</structfield>[1] if the
|
|
||||||
scanning system is progressive, &ie; not interlaced. The
|
|
||||||
corresponding start value shall be ignored by the application and
|
|
||||||
driver. Anyway, drivers may not support single field capturing and
|
|
||||||
return both count values non-zero.</para><para>Both
|
|
||||||
<structfield>count</structfield> values set to zero, or line numbers
|
|
||||||
outside the bounds depicted in <xref linkend="vbi-525" /> and <xref
|
|
||||||
linkend="vbi-625" />, or a field image covering
|
|
||||||
lines of two fields, are invalid and shall not be returned by the
|
|
||||||
driver.</para><para>To initialize the <structfield>start</structfield>
|
|
||||||
and <structfield>count</structfield> fields, applications must first
|
|
||||||
determine the current video standard selection. The &v4l2-std-id; or
|
|
||||||
the <structfield>framelines</structfield> field of &v4l2-standard; can
|
|
||||||
be evaluated for this purpose.</para></entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>flags</structfield></entry>
|
|
||||||
<entry>See <xref linkend="vbifmt-flags" /> below. Currently
|
|
||||||
only drivers set flags, applications must set this field to
|
|
||||||
zero.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>reserved</structfield>[2]</entry>
|
|
||||||
<entry>This array is reserved for future extensions.
|
|
||||||
Drivers and applications must set it to zero.</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<table pgwide="1" frame="none" id="vbifmt-flags">
|
|
||||||
<title>Raw VBI Format Flags</title>
|
|
||||||
<tgroup cols="3">
|
|
||||||
&cs-def;
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry><constant>V4L2_VBI_UNSYNC</constant></entry>
|
|
||||||
<entry>0x0001</entry>
|
|
||||||
<entry><para>This flag indicates hardware which does not
|
|
||||||
properly distinguish between fields. Normally the VBI image stores the
|
|
||||||
first field (lower scanning line numbers) first in memory. This may be
|
|
||||||
a top or bottom field depending on the video standard. When this flag
|
|
||||||
is set the first or second field may be stored first, however the
|
|
||||||
fields are still in correct temporal order with the older field first
|
|
||||||
in memory.<footnote>
|
|
||||||
<para>Most VBI services transmit on both fields, but
|
|
||||||
some have different semantics depending on the field number. These
|
|
||||||
cannot be reliable decoded or encoded when
|
|
||||||
<constant>V4L2_VBI_UNSYNC</constant> is set.</para>
|
|
||||||
</footnote></para></entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry><constant>V4L2_VBI_INTERLACED</constant></entry>
|
|
||||||
<entry>0x0002</entry>
|
|
||||||
<entry>By default the two field images will be passed
|
|
||||||
sequentially; all lines of the first field followed by all lines of
|
|
||||||
the second field (compare <xref linkend="field-order" />
|
|
||||||
<constant>V4L2_FIELD_SEQ_TB</constant> and
|
|
||||||
<constant>V4L2_FIELD_SEQ_BT</constant>, whether the top or bottom
|
|
||||||
field is first in memory depends on the video standard). When this
|
|
||||||
flag is set, the two fields are interlaced (cf.
|
|
||||||
<constant>V4L2_FIELD_INTERLACED</constant>). The first line of the
|
|
||||||
first field followed by the first line of the second field, then the
|
|
||||||
two second lines, and so on. Such a layout may be necessary when the
|
|
||||||
hardware has been programmed to capture or output interlaced video
|
|
||||||
images and is unable to separate the fields for VBI capturing at
|
|
||||||
the same time. For simplicity setting this flag implies that both
|
|
||||||
<structfield>count</structfield> values are equal and non-zero.</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<figure id="vbi-hsync">
|
|
||||||
<title>Line synchronization</title>
|
|
||||||
<mediaobject>
|
|
||||||
<imageobject>
|
|
||||||
<imagedata fileref="vbi_hsync.pdf" format="PS" />
|
|
||||||
</imageobject>
|
|
||||||
<imageobject>
|
|
||||||
<imagedata fileref="vbi_hsync.gif" format="GIF" />
|
|
||||||
</imageobject>
|
|
||||||
<textobject>
|
|
||||||
<phrase>Line synchronization diagram</phrase>
|
|
||||||
</textobject>
|
|
||||||
</mediaobject>
|
|
||||||
</figure>
|
|
||||||
|
|
||||||
<figure id="vbi-525">
|
|
||||||
<title>ITU-R 525 line numbering (M/NTSC and M/PAL)</title>
|
|
||||||
<mediaobject>
|
|
||||||
<imageobject>
|
|
||||||
<imagedata fileref="vbi_525.pdf" format="PS" />
|
|
||||||
</imageobject>
|
|
||||||
<imageobject>
|
|
||||||
<imagedata fileref="vbi_525.gif" format="GIF" />
|
|
||||||
</imageobject>
|
|
||||||
<textobject>
|
|
||||||
<phrase>NTSC field synchronization diagram</phrase>
|
|
||||||
</textobject>
|
|
||||||
<caption>
|
|
||||||
<para>(1) For the purpose of this specification field 2
|
|
||||||
starts in line 264 and not 263.5 because half line capturing is not
|
|
||||||
supported.</para>
|
|
||||||
</caption>
|
|
||||||
</mediaobject>
|
|
||||||
</figure>
|
|
||||||
|
|
||||||
<figure id="vbi-625">
|
|
||||||
<title>ITU-R 625 line numbering</title>
|
|
||||||
<mediaobject>
|
|
||||||
<imageobject>
|
|
||||||
<imagedata fileref="vbi_625.pdf" format="PS" />
|
|
||||||
</imageobject>
|
|
||||||
<imageobject>
|
|
||||||
<imagedata fileref="vbi_625.gif" format="GIF" />
|
|
||||||
</imageobject>
|
|
||||||
<textobject>
|
|
||||||
<phrase>PAL/SECAM field synchronization diagram</phrase>
|
|
||||||
</textobject>
|
|
||||||
<caption>
|
|
||||||
<para>(1) For the purpose of this specification field 2
|
|
||||||
starts in line 314 and not 313.5 because half line capturing is not
|
|
||||||
supported.</para>
|
|
||||||
</caption>
|
|
||||||
</mediaobject>
|
|
||||||
</figure>
|
|
||||||
|
|
||||||
<para>Remember the VBI image format depends on the selected
|
|
||||||
video standard, therefore the application must choose a new standard or
|
|
||||||
query the current standard first. Attempts to read or write data ahead
|
|
||||||
of format negotiation, or after switching the video standard which may
|
|
||||||
invalidate the negotiated VBI parameters, should be refused by the
|
|
||||||
driver. A format change during active I/O is not permitted.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Reading and writing VBI images</title>
|
|
||||||
|
|
||||||
<para>To assure synchronization with the field number and easier
|
|
||||||
implementation, the smallest unit of data passed at a time is one
|
|
||||||
frame, consisting of two fields of VBI images immediately following in
|
|
||||||
memory.</para>
|
|
||||||
|
|
||||||
<para>The total size of a frame computes as follows:</para>
|
|
||||||
|
|
||||||
<programlisting>
|
|
||||||
(<structfield>count</structfield>[0] + <structfield>count</structfield>[1]) *
|
|
||||||
<structfield>samples_per_line</structfield> * sample size in bytes</programlisting>
|
|
||||||
|
|
||||||
<para>The sample size is most likely always one byte,
|
|
||||||
applications must check the <structfield>sample_format</structfield>
|
|
||||||
field though, to function properly with other drivers.</para>
|
|
||||||
|
|
||||||
<para>A VBI device may support <link
|
|
||||||
linkend="rw">read/write</link> and/or streaming (<link
|
|
||||||
linkend="mmap">memory mapping</link> or <link
|
|
||||||
linkend="userp">user pointer</link>) I/O. The latter bears the
|
|
||||||
possibility of synchronizing video and
|
|
||||||
VBI data by using buffer timestamps.</para>
|
|
||||||
|
|
||||||
<para>Remember the &VIDIOC-STREAMON; ioctl and the first read(),
|
|
||||||
write() and select() call can be resource allocation points returning
|
|
||||||
an &EBUSY; if the required hardware resources are temporarily
|
|
||||||
unavailable, for example the device is already in use by another
|
|
||||||
process.</para>
|
|
||||||
</section>
|
|
||||||
@@ -1,196 +0,0 @@
|
|||||||
<title>RDS Interface</title>
|
|
||||||
|
|
||||||
<para>The Radio Data System transmits supplementary
|
|
||||||
information in binary format, for example the station name or travel
|
|
||||||
information, on an inaudible audio subcarrier of a radio program. This
|
|
||||||
interface is aimed at devices capable of receiving and/or transmitting RDS
|
|
||||||
information.</para>
|
|
||||||
|
|
||||||
<para>For more information see the core RDS standard <xref linkend="iec62106" />
|
|
||||||
and the RBDS standard <xref linkend="nrsc4" />.</para>
|
|
||||||
|
|
||||||
<para>Note that the RBDS standard as is used in the USA is almost identical
|
|
||||||
to the RDS standard. Any RDS decoder/encoder can also handle RBDS. Only some of the
|
|
||||||
fields have slightly different meanings. See the RBDS standard for more
|
|
||||||
information.</para>
|
|
||||||
|
|
||||||
<para>The RBDS standard also specifies support for MMBS (Modified Mobile Search).
|
|
||||||
This is a proprietary format which seems to be discontinued. The RDS interface does not
|
|
||||||
support this format. Should support for MMBS (or the so-called 'E blocks' in general)
|
|
||||||
be needed, then please contact the linux-media mailing list: &v4l-ml;.</para>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Querying Capabilities</title>
|
|
||||||
|
|
||||||
<para>Devices supporting the RDS capturing API set
|
|
||||||
the <constant>V4L2_CAP_RDS_CAPTURE</constant> flag in
|
|
||||||
the <structfield>capabilities</structfield> field of &v4l2-capability;
|
|
||||||
returned by the &VIDIOC-QUERYCAP; ioctl. Any tuner that supports RDS
|
|
||||||
will set the <constant>V4L2_TUNER_CAP_RDS</constant> flag in
|
|
||||||
the <structfield>capability</structfield> field of &v4l2-tuner;. If
|
|
||||||
the driver only passes RDS blocks without interpreting the data
|
|
||||||
the <constant>V4L2_TUNER_CAP_RDS_BLOCK_IO</constant> flag has to be
|
|
||||||
set, see <link linkend="reading-rds-data">Reading RDS data</link>.
|
|
||||||
For future use the
|
|
||||||
flag <constant>V4L2_TUNER_CAP_RDS_CONTROLS</constant> has also been
|
|
||||||
defined. However, a driver for a radio tuner with this capability does
|
|
||||||
not yet exist, so if you are planning to write such a driver you
|
|
||||||
should discuss this on the linux-media mailing list: &v4l-ml;.</para>
|
|
||||||
|
|
||||||
<para> Whether an RDS signal is present can be detected by looking
|
|
||||||
at the <structfield>rxsubchans</structfield> field of &v4l2-tuner;:
|
|
||||||
the <constant>V4L2_TUNER_SUB_RDS</constant> will be set if RDS data
|
|
||||||
was detected.</para>
|
|
||||||
|
|
||||||
<para>Devices supporting the RDS output API
|
|
||||||
set the <constant>V4L2_CAP_RDS_OUTPUT</constant> flag in
|
|
||||||
the <structfield>capabilities</structfield> field of &v4l2-capability;
|
|
||||||
returned by the &VIDIOC-QUERYCAP; ioctl.
|
|
||||||
Any modulator that supports RDS will set the
|
|
||||||
<constant>V4L2_TUNER_CAP_RDS</constant> flag in the <structfield>capability</structfield>
|
|
||||||
field of &v4l2-modulator;.
|
|
||||||
In order to enable the RDS transmission one must set the <constant>V4L2_TUNER_SUB_RDS</constant>
|
|
||||||
bit in the <structfield>txsubchans</structfield> field of &v4l2-modulator;.
|
|
||||||
If the driver only passes RDS blocks without interpreting the data
|
|
||||||
the <constant>V4L2_TUNER_CAP_RDS_BLOCK_IO</constant> flag has to be set. If the
|
|
||||||
tuner is capable of handling RDS entities like program identification codes and radio
|
|
||||||
text, the flag <constant>V4L2_TUNER_CAP_RDS_CONTROLS</constant> should be set,
|
|
||||||
see <link linkend="writing-rds-data">Writing RDS data</link> and
|
|
||||||
<link linkend="fm-tx-controls">FM Transmitter Control Reference</link>.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="reading-rds-data">
|
|
||||||
<title>Reading RDS data</title>
|
|
||||||
|
|
||||||
<para>RDS data can be read from the radio device
|
|
||||||
with the &func-read; function. The data is packed in groups of three bytes.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="writing-rds-data">
|
|
||||||
<title>Writing RDS data</title>
|
|
||||||
|
|
||||||
<para>RDS data can be written to the radio device
|
|
||||||
with the &func-write; function. The data is packed in groups of three bytes,
|
|
||||||
as follows:</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>RDS datastructures</title>
|
|
||||||
<table frame="none" pgwide="1" id="v4l2-rds-data">
|
|
||||||
<title>struct
|
|
||||||
<structname>v4l2_rds_data</structname></title>
|
|
||||||
<tgroup cols="3">
|
|
||||||
<colspec colname="c1" colwidth="1*" />
|
|
||||||
<colspec colname="c2" colwidth="1*" />
|
|
||||||
<colspec colname="c3" colwidth="5*" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry>__u8</entry>
|
|
||||||
<entry><structfield>lsb</structfield></entry>
|
|
||||||
<entry>Least Significant Byte of RDS Block</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u8</entry>
|
|
||||||
<entry><structfield>msb</structfield></entry>
|
|
||||||
<entry>Most Significant Byte of RDS Block</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u8</entry>
|
|
||||||
<entry><structfield>block</structfield></entry>
|
|
||||||
<entry>Block description</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
<table frame="none" pgwide="1" id="v4l2-rds-block">
|
|
||||||
<title>Block description</title>
|
|
||||||
<tgroup cols="2">
|
|
||||||
<colspec colname="c1" colwidth="1*" />
|
|
||||||
<colspec colname="c2" colwidth="5*" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry>Bits 0-2</entry>
|
|
||||||
<entry>Block (aka offset) of the received data.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>Bits 3-5</entry>
|
|
||||||
<entry>Deprecated. Currently identical to bits 0-2. Do not use these bits.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>Bit 6</entry>
|
|
||||||
<entry>Corrected bit. Indicates that an error was corrected for this data block.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>Bit 7</entry>
|
|
||||||
<entry>Error bit. Indicates that an uncorrectable error occurred during reception of this block.</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<table frame="none" pgwide="1" id="v4l2-rds-block-codes">
|
|
||||||
<title>Block defines</title>
|
|
||||||
<tgroup cols="4">
|
|
||||||
<colspec colname="c1" colwidth="1*" />
|
|
||||||
<colspec colname="c2" colwidth="1*" />
|
|
||||||
<colspec colname="c3" colwidth="1*" />
|
|
||||||
<colspec colname="c4" colwidth="5*" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry>V4L2_RDS_BLOCK_MSK</entry>
|
|
||||||
<entry> </entry>
|
|
||||||
<entry>7</entry>
|
|
||||||
<entry>Mask for bits 0-2 to get the block ID.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>V4L2_RDS_BLOCK_A</entry>
|
|
||||||
<entry> </entry>
|
|
||||||
<entry>0</entry>
|
|
||||||
<entry>Block A.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>V4L2_RDS_BLOCK_B</entry>
|
|
||||||
<entry> </entry>
|
|
||||||
<entry>1</entry>
|
|
||||||
<entry>Block B.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>V4L2_RDS_BLOCK_C</entry>
|
|
||||||
<entry> </entry>
|
|
||||||
<entry>2</entry>
|
|
||||||
<entry>Block C.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>V4L2_RDS_BLOCK_D</entry>
|
|
||||||
<entry> </entry>
|
|
||||||
<entry>3</entry>
|
|
||||||
<entry>Block D.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>V4L2_RDS_BLOCK_C_ALT</entry>
|
|
||||||
<entry> </entry>
|
|
||||||
<entry>4</entry>
|
|
||||||
<entry>Block C'.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>V4L2_RDS_BLOCK_INVALID</entry>
|
|
||||||
<entry>read-only</entry>
|
|
||||||
<entry>7</entry>
|
|
||||||
<entry>An invalid block.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>V4L2_RDS_BLOCK_CORRECTED</entry>
|
|
||||||
<entry>read-only</entry>
|
|
||||||
<entry>0x40</entry>
|
|
||||||
<entry>A bit error was detected but corrected.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>V4L2_RDS_BLOCK_ERROR</entry>
|
|
||||||
<entry>read-only</entry>
|
|
||||||
<entry>0x80</entry>
|
|
||||||
<entry>An uncorrectable error occurred.</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
</section>
|
|
||||||
@@ -1,126 +0,0 @@
|
|||||||
<title>Software Defined Radio Interface (SDR)</title>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
SDR is an abbreviation of Software Defined Radio, the radio device
|
|
||||||
which uses application software for modulation or demodulation. This interface
|
|
||||||
is intended for controlling and data streaming of such devices.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
SDR devices are accessed through character device special files named
|
|
||||||
<filename>/dev/swradio0</filename> to <filename>/dev/swradio255</filename>
|
|
||||||
with major number 81 and dynamically allocated minor numbers 0 to 255.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Querying Capabilities</title>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
Devices supporting the SDR receiver interface set the
|
|
||||||
<constant>V4L2_CAP_SDR_CAPTURE</constant> and
|
|
||||||
<constant>V4L2_CAP_TUNER</constant> flag in the
|
|
||||||
<structfield>capabilities</structfield> field of &v4l2-capability;
|
|
||||||
returned by the &VIDIOC-QUERYCAP; ioctl. That flag means the device has an
|
|
||||||
Analog to Digital Converter (ADC), which is a mandatory element for the SDR receiver.
|
|
||||||
</para>
|
|
||||||
<para>
|
|
||||||
Devices supporting the SDR transmitter interface set the
|
|
||||||
<constant>V4L2_CAP_SDR_OUTPUT</constant> and
|
|
||||||
<constant>V4L2_CAP_MODULATOR</constant> flag in the
|
|
||||||
<structfield>capabilities</structfield> field of &v4l2-capability;
|
|
||||||
returned by the &VIDIOC-QUERYCAP; ioctl. That flag means the device has an
|
|
||||||
Digital to Analog Converter (DAC), which is a mandatory element for the SDR transmitter.
|
|
||||||
</para>
|
|
||||||
<para>
|
|
||||||
At least one of the read/write, streaming or asynchronous I/O methods must
|
|
||||||
be supported.
|
|
||||||
</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Supplemental Functions</title>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
SDR devices can support <link linkend="control">controls</link>, and must
|
|
||||||
support the <link linkend="tuner">tuner</link> ioctls. Tuner ioctls are used
|
|
||||||
for setting the ADC/DAC sampling rate (sampling frequency) and the possible
|
|
||||||
radio frequency (RF).
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
The <constant>V4L2_TUNER_SDR</constant> tuner type is used for setting SDR
|
|
||||||
device ADC/DAC frequency, and the <constant>V4L2_TUNER_RF</constant>
|
|
||||||
tuner type is used for setting radio frequency.
|
|
||||||
The tuner index of the RF tuner (if any) must always follow the SDR tuner index.
|
|
||||||
Normally the SDR tuner is #0 and the RF tuner is #1.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
The &VIDIOC-S-HW-FREQ-SEEK; ioctl is not supported.
|
|
||||||
</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Data Format Negotiation</title>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
The SDR device uses the <link linkend="format">format</link> ioctls to
|
|
||||||
select the capture and output format. Both the sampling resolution and the data
|
|
||||||
streaming format are bound to that selectable format. In addition to the basic
|
|
||||||
<link linkend="format">format</link> ioctls, the &VIDIOC-ENUM-FMT; ioctl
|
|
||||||
must be supported as well.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
To use the <link linkend="format">format</link> ioctls applications set the
|
|
||||||
<structfield>type</structfield> field of a &v4l2-format; to
|
|
||||||
<constant>V4L2_BUF_TYPE_SDR_CAPTURE</constant> or
|
|
||||||
<constant>V4L2_BUF_TYPE_SDR_OUTPUT</constant> and use the &v4l2-sdr-format;
|
|
||||||
<structfield>sdr</structfield> member of the <structfield>fmt</structfield>
|
|
||||||
union as needed per the desired operation.
|
|
||||||
Currently there is two fields, <structfield>pixelformat</structfield> and
|
|
||||||
<structfield>buffersize</structfield>, of struct &v4l2-sdr-format; which are
|
|
||||||
used. Content of the <structfield>pixelformat</structfield> is V4L2 FourCC
|
|
||||||
code of the data format. The <structfield>buffersize</structfield> field is
|
|
||||||
maximum buffer size in bytes required for data transfer, set by the driver in
|
|
||||||
order to inform application.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<table pgwide="1" frame="none" id="v4l2-sdr-format">
|
|
||||||
<title>struct <structname>v4l2_sdr_format</structname></title>
|
|
||||||
<tgroup cols="3">
|
|
||||||
&cs-str;
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>pixelformat</structfield></entry>
|
|
||||||
<entry>
|
|
||||||
The data format or type of compression, set by the application. This is a
|
|
||||||
little endian <link linkend="v4l2-fourcc">four character code</link>.
|
|
||||||
V4L2 defines SDR formats in <xref linkend="sdr-formats" />.
|
|
||||||
</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>buffersize</structfield></entry>
|
|
||||||
<entry>
|
|
||||||
Maximum size in bytes required for data. Value is set by the driver.
|
|
||||||
</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u8</entry>
|
|
||||||
<entry><structfield>reserved[24]</structfield></entry>
|
|
||||||
<entry>This array is reserved for future extensions.
|
|
||||||
Drivers and applications must set it to zero.</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
An SDR device may support <link linkend="rw">read/write</link>
|
|
||||||
and/or streaming (<link linkend="mmap">memory mapping</link>
|
|
||||||
or <link linkend="userp">user pointer</link>) I/O.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
@@ -1,706 +0,0 @@
|
|||||||
<title>Sliced VBI Data Interface</title>
|
|
||||||
|
|
||||||
<para>VBI stands for Vertical Blanking Interval, a gap in the
|
|
||||||
sequence of lines of an analog video signal. During VBI no picture
|
|
||||||
information is transmitted, allowing some time while the electron beam
|
|
||||||
of a cathode ray tube TV returns to the top of the screen.</para>
|
|
||||||
|
|
||||||
<para>Sliced VBI devices use hardware to demodulate data transmitted
|
|
||||||
in the VBI. V4L2 drivers shall <emphasis>not</emphasis> do this by
|
|
||||||
software, see also the <link linkend="raw-vbi">raw VBI
|
|
||||||
interface</link>. The data is passed as short packets of fixed size,
|
|
||||||
covering one scan line each. The number of packets per video frame is
|
|
||||||
variable.</para>
|
|
||||||
|
|
||||||
<para>Sliced VBI capture and output devices are accessed through the
|
|
||||||
same character special files as raw VBI devices. When a driver
|
|
||||||
supports both interfaces, the default function of a
|
|
||||||
<filename>/dev/vbi</filename> device is <emphasis>raw</emphasis> VBI
|
|
||||||
capturing or output, and the sliced VBI function is only available
|
|
||||||
after calling the &VIDIOC-S-FMT; ioctl as defined below. Likewise a
|
|
||||||
<filename>/dev/video</filename> device may support the sliced VBI API,
|
|
||||||
however the default function here is video capturing or output.
|
|
||||||
Different file descriptors must be used to pass raw and sliced VBI
|
|
||||||
data simultaneously, if this is supported by the driver.</para>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Querying Capabilities</title>
|
|
||||||
|
|
||||||
<para>Devices supporting the sliced VBI capturing or output API
|
|
||||||
set the <constant>V4L2_CAP_SLICED_VBI_CAPTURE</constant> or
|
|
||||||
<constant>V4L2_CAP_SLICED_VBI_OUTPUT</constant> flag respectively, in
|
|
||||||
the <structfield>capabilities</structfield> field of &v4l2-capability;
|
|
||||||
returned by the &VIDIOC-QUERYCAP; ioctl. At least one of the
|
|
||||||
read/write, streaming or asynchronous <link linkend="io">I/O
|
|
||||||
methods</link> must be supported. Sliced VBI devices may have a tuner
|
|
||||||
or modulator.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Supplemental Functions</title>
|
|
||||||
|
|
||||||
<para>Sliced VBI devices shall support <link linkend="video">video
|
|
||||||
input or output</link> and <link linkend="tuner">tuner or
|
|
||||||
modulator</link> ioctls if they have these capabilities, and they may
|
|
||||||
support <link linkend="control">control</link> ioctls. The <link
|
|
||||||
linkend="standard">video standard</link> ioctls provide information
|
|
||||||
vital to program a sliced VBI device, therefore must be
|
|
||||||
supported.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="sliced-vbi-format-negotitation">
|
|
||||||
<title>Sliced VBI Format Negotiation</title>
|
|
||||||
|
|
||||||
<para>To find out which data services are supported by the
|
|
||||||
hardware applications can call the &VIDIOC-G-SLICED-VBI-CAP; ioctl.
|
|
||||||
All drivers implementing the sliced VBI interface must support this
|
|
||||||
ioctl. The results may differ from those of the &VIDIOC-S-FMT; ioctl
|
|
||||||
when the number of VBI lines the hardware can capture or output per
|
|
||||||
frame, or the number of services it can identify on a given line are
|
|
||||||
limited. For example on PAL line 16 the hardware may be able to look
|
|
||||||
for a VPS or Teletext signal, but not both at the same time.</para>
|
|
||||||
|
|
||||||
<para>To determine the currently selected services applications
|
|
||||||
set the <structfield>type </structfield> field of &v4l2-format; to
|
|
||||||
<constant> V4L2_BUF_TYPE_SLICED_VBI_CAPTURE</constant> or <constant>
|
|
||||||
V4L2_BUF_TYPE_SLICED_VBI_OUTPUT</constant>, and the &VIDIOC-G-FMT;
|
|
||||||
ioctl fills the <structfield>fmt.sliced</structfield> member, a
|
|
||||||
&v4l2-sliced-vbi-format;.</para>
|
|
||||||
|
|
||||||
<para>Applications can request different parameters by
|
|
||||||
initializing or modifying the <structfield>fmt.sliced</structfield>
|
|
||||||
member and calling the &VIDIOC-S-FMT; ioctl with a pointer to the
|
|
||||||
<structname>v4l2_format</structname> structure.</para>
|
|
||||||
|
|
||||||
<para>The sliced VBI API is more complicated than the raw VBI API
|
|
||||||
because the hardware must be told which VBI service to expect on each
|
|
||||||
scan line. Not all services may be supported by the hardware on all
|
|
||||||
lines (this is especially true for VBI output where Teletext is often
|
|
||||||
unsupported and other services can only be inserted in one specific
|
|
||||||
line). In many cases, however, it is sufficient to just set the
|
|
||||||
<structfield>service_set</structfield> field to the required services
|
|
||||||
and let the driver fill the <structfield>service_lines</structfield>
|
|
||||||
array according to hardware capabilities. Only if more precise control
|
|
||||||
is needed should the programmer set the
|
|
||||||
<structfield>service_lines</structfield> array explicitly.</para>
|
|
||||||
|
|
||||||
<para>The &VIDIOC-S-FMT; ioctl modifies the parameters
|
|
||||||
according to hardware capabilities. When the driver allocates
|
|
||||||
resources at this point, it may return an &EBUSY; if the required
|
|
||||||
resources are temporarily unavailable. Other resource allocation
|
|
||||||
points which may return <errorcode>EBUSY</errorcode> can be the
|
|
||||||
&VIDIOC-STREAMON; ioctl and the first &func-read;, &func-write; and
|
|
||||||
&func-select; call.</para>
|
|
||||||
|
|
||||||
<table frame="none" pgwide="1" id="v4l2-sliced-vbi-format">
|
|
||||||
<title>struct
|
|
||||||
<structname>v4l2_sliced_vbi_format</structname></title>
|
|
||||||
<tgroup cols="5">
|
|
||||||
<colspec colname="c1" colwidth="3*" />
|
|
||||||
<colspec colname="c2" colwidth="3*" />
|
|
||||||
<colspec colname="c3" colwidth="2*" />
|
|
||||||
<colspec colname="c4" colwidth="2*" />
|
|
||||||
<colspec colname="c5" colwidth="2*" />
|
|
||||||
<spanspec namest="c3" nameend="c5" spanname="hspan" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>service_set</structfield></entry>
|
|
||||||
<entry spanname="hspan"><para>If
|
|
||||||
<structfield>service_set</structfield> is non-zero when passed with
|
|
||||||
&VIDIOC-S-FMT; or &VIDIOC-TRY-FMT;, the
|
|
||||||
<structfield>service_lines</structfield> array will be filled by the
|
|
||||||
driver according to the services specified in this field. For example,
|
|
||||||
if <structfield>service_set</structfield> is initialized with
|
|
||||||
<constant>V4L2_SLICED_TELETEXT_B | V4L2_SLICED_WSS_625</constant>, a
|
|
||||||
driver for the cx25840 video decoder sets lines 7-22 of both
|
|
||||||
fields<footnote><para>According to <link
|
|
||||||
linkend="ets300706">ETS 300 706</link> lines 6-22 of the
|
|
||||||
first field and lines 5-22 of the second field may carry Teletext
|
|
||||||
data.</para></footnote> to <constant>V4L2_SLICED_TELETEXT_B</constant>
|
|
||||||
and line 23 of the first field to
|
|
||||||
<constant>V4L2_SLICED_WSS_625</constant>. If
|
|
||||||
<structfield>service_set</structfield> is set to zero, then the values
|
|
||||||
of <structfield>service_lines</structfield> will be used instead.
|
|
||||||
</para><para>On return the driver sets this field to the union of all
|
|
||||||
elements of the returned <structfield>service_lines</structfield>
|
|
||||||
array. It may contain less services than requested, perhaps just one,
|
|
||||||
if the hardware cannot handle more services simultaneously. It may be
|
|
||||||
empty (zero) if none of the requested services are supported by the
|
|
||||||
hardware.</para></entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u16</entry>
|
|
||||||
<entry><structfield>service_lines</structfield>[2][24]</entry>
|
|
||||||
<entry spanname="hspan"><para>Applications initialize this
|
|
||||||
array with sets of data services the driver shall look for or insert
|
|
||||||
on the respective scan line. Subject to hardware capabilities drivers
|
|
||||||
return the requested set, a subset, which may be just a single
|
|
||||||
service, or an empty set. When the hardware cannot handle multiple
|
|
||||||
services on the same line the driver shall choose one. No assumptions
|
|
||||||
can be made on which service the driver chooses.</para><para>Data
|
|
||||||
services are defined in <xref linkend="vbi-services2" />. Array indices
|
|
||||||
map to ITU-R line numbers (see also <xref linkend="vbi-525" /> and <xref
|
|
||||||
linkend="vbi-625" />) as follows: <!-- No nested
|
|
||||||
tables, sigh. --></para></entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>Element</entry>
|
|
||||||
<entry>525 line systems</entry>
|
|
||||||
<entry>625 line systems</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry><structfield>service_lines</structfield>[0][1]</entry>
|
|
||||||
<entry align="center">1</entry>
|
|
||||||
<entry align="center">1</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry><structfield>service_lines</structfield>[0][23]</entry>
|
|
||||||
<entry align="center">23</entry>
|
|
||||||
<entry align="center">23</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry><structfield>service_lines</structfield>[1][1]</entry>
|
|
||||||
<entry align="center">264</entry>
|
|
||||||
<entry align="center">314</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry><structfield>service_lines</structfield>[1][23]</entry>
|
|
||||||
<entry align="center">286</entry>
|
|
||||||
<entry align="center">336</entry>
|
|
||||||
</row>
|
|
||||||
<!-- End of line numbers table. -->
|
|
||||||
<row>
|
|
||||||
<entry></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry spanname="hspan">Drivers must set
|
|
||||||
<structfield>service_lines</structfield>[0][0] and
|
|
||||||
<structfield>service_lines</structfield>[1][0] to zero.
|
|
||||||
The <constant>V4L2_VBI_ITU_525_F1_START</constant>,
|
|
||||||
<constant>V4L2_VBI_ITU_525_F2_START</constant>,
|
|
||||||
<constant>V4L2_VBI_ITU_625_F1_START</constant> and
|
|
||||||
<constant>V4L2_VBI_ITU_625_F2_START</constant> defines give the start
|
|
||||||
line numbers for each field for each 525 or 625 line format as a
|
|
||||||
convenience. Don't forget that ITU line numbering starts at 1, not 0.
|
|
||||||
</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>io_size</structfield></entry>
|
|
||||||
<entry spanname="hspan">Maximum number of bytes passed by
|
|
||||||
one &func-read; or &func-write; call, and the buffer size in bytes for
|
|
||||||
the &VIDIOC-QBUF; and &VIDIOC-DQBUF; ioctl. Drivers set this field to
|
|
||||||
the size of &v4l2-sliced-vbi-data; times the number of non-zero
|
|
||||||
elements in the returned <structfield>service_lines</structfield>
|
|
||||||
array (that is the number of lines potentially carrying data).</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>reserved</structfield>[2]</entry>
|
|
||||||
<entry spanname="hspan">This array is reserved for future
|
|
||||||
extensions. Applications and drivers must set it to zero.</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<!-- See also vidioc-g-sliced-vbi-cap.sgml -->
|
|
||||||
<table frame="none" pgwide="1" id="vbi-services2">
|
|
||||||
<title>Sliced VBI services</title>
|
|
||||||
<tgroup cols="5">
|
|
||||||
<colspec colname="c1" colwidth="2*" />
|
|
||||||
<colspec colname="c2" colwidth="1*" />
|
|
||||||
<colspec colname="c3" colwidth="1*" />
|
|
||||||
<colspec colname="c4" colwidth="2*" />
|
|
||||||
<colspec colname="c5" colwidth="2*" />
|
|
||||||
<spanspec namest="c3" nameend="c5" spanname="rlp" />
|
|
||||||
<thead>
|
|
||||||
<row>
|
|
||||||
<entry>Symbol</entry>
|
|
||||||
<entry>Value</entry>
|
|
||||||
<entry>Reference</entry>
|
|
||||||
<entry>Lines, usually</entry>
|
|
||||||
<entry>Payload</entry>
|
|
||||||
</row>
|
|
||||||
</thead>
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry><constant>V4L2_SLICED_TELETEXT_B</constant>
|
|
||||||
(Teletext System B)</entry>
|
|
||||||
<entry>0x0001</entry>
|
|
||||||
<entry><xref linkend="ets300706" />, <xref linkend="itu653" /></entry>
|
|
||||||
<entry>PAL/SECAM line 7-22, 320-335 (second field 7-22)</entry>
|
|
||||||
<entry>Last 42 of the 45 byte Teletext packet, that is
|
|
||||||
without clock run-in and framing code, lsb first transmitted.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry><constant>V4L2_SLICED_VPS</constant></entry>
|
|
||||||
<entry>0x0400</entry>
|
|
||||||
<entry><xref linkend="ets300231" /></entry>
|
|
||||||
<entry>PAL line 16</entry>
|
|
||||||
<entry>Byte number 3 to 15 according to Figure 9 of
|
|
||||||
ETS 300 231, lsb first transmitted.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry><constant>V4L2_SLICED_CAPTION_525</constant></entry>
|
|
||||||
<entry>0x1000</entry>
|
|
||||||
<entry><xref linkend="cea608" /></entry>
|
|
||||||
<entry>NTSC line 21, 284 (second field 21)</entry>
|
|
||||||
<entry>Two bytes in transmission order, including parity
|
|
||||||
bit, lsb first transmitted.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry><constant>V4L2_SLICED_WSS_625</constant></entry>
|
|
||||||
<entry>0x4000</entry>
|
|
||||||
<entry><xref linkend="itu1119" />, <xref linkend="en300294" /></entry>
|
|
||||||
<entry>PAL/SECAM line 23</entry>
|
|
||||||
<entry><screen>
|
|
||||||
Byte 0 1
|
|
||||||
msb lsb msb lsb
|
|
||||||
Bit 7 6 5 4 3 2 1 0 x x 13 12 11 10 9
|
|
||||||
</screen></entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry><constant>V4L2_SLICED_VBI_525</constant></entry>
|
|
||||||
<entry>0x1000</entry>
|
|
||||||
<entry spanname="rlp">Set of services applicable to 525
|
|
||||||
line systems.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry><constant>V4L2_SLICED_VBI_625</constant></entry>
|
|
||||||
<entry>0x4401</entry>
|
|
||||||
<entry spanname="rlp">Set of services applicable to 625
|
|
||||||
line systems.</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<para>Drivers may return an &EINVAL; when applications attempt to
|
|
||||||
read or write data without prior format negotiation, after switching
|
|
||||||
the video standard (which may invalidate the negotiated VBI
|
|
||||||
parameters) and after switching the video input (which may change the
|
|
||||||
video standard as a side effect). The &VIDIOC-S-FMT; ioctl may return
|
|
||||||
an &EBUSY; when applications attempt to change the format while i/o is
|
|
||||||
in progress (between a &VIDIOC-STREAMON; and &VIDIOC-STREAMOFF; call,
|
|
||||||
and after the first &func-read; or &func-write; call).</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Reading and writing sliced VBI data</title>
|
|
||||||
|
|
||||||
<para>A single &func-read; or &func-write; call must pass all data
|
|
||||||
belonging to one video frame. That is an array of
|
|
||||||
<structname>v4l2_sliced_vbi_data</structname> structures with one or
|
|
||||||
more elements and a total size not exceeding
|
|
||||||
<structfield>io_size</structfield> bytes. Likewise in streaming I/O
|
|
||||||
mode one buffer of <structfield>io_size</structfield> bytes must
|
|
||||||
contain data of one video frame. The <structfield>id</structfield> of
|
|
||||||
unused <structname>v4l2_sliced_vbi_data</structname> elements must be
|
|
||||||
zero.</para>
|
|
||||||
|
|
||||||
<table frame="none" pgwide="1" id="v4l2-sliced-vbi-data">
|
|
||||||
<title>struct
|
|
||||||
<structname>v4l2_sliced_vbi_data</structname></title>
|
|
||||||
<tgroup cols="3">
|
|
||||||
&cs-def;
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>id</structfield></entry>
|
|
||||||
<entry>A flag from <xref linkend="vbi-services" />
|
|
||||||
identifying the type of data in this packet. Only a single bit must be
|
|
||||||
set. When the <structfield>id</structfield> of a captured packet is
|
|
||||||
zero, the packet is empty and the contents of other fields are
|
|
||||||
undefined. Applications shall ignore empty packets. When the
|
|
||||||
<structfield>id</structfield> of a packet for output is zero the
|
|
||||||
contents of the <structfield>data</structfield> field are undefined
|
|
||||||
and the driver must no longer insert data on the requested
|
|
||||||
<structfield>field</structfield> and
|
|
||||||
<structfield>line</structfield>.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>field</structfield></entry>
|
|
||||||
<entry>The video field number this data has been captured
|
|
||||||
from, or shall be inserted at. <constant>0</constant> for the first
|
|
||||||
field, <constant>1</constant> for the second field.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>line</structfield></entry>
|
|
||||||
<entry>The field (as opposed to frame) line number this
|
|
||||||
data has been captured from, or shall be inserted at. See <xref
|
|
||||||
linkend="vbi-525" /> and <xref linkend="vbi-625" /> for valid
|
|
||||||
values. Sliced VBI capture devices can set the line number of all
|
|
||||||
packets to <constant>0</constant> if the hardware cannot reliably
|
|
||||||
identify scan lines. The field number must always be valid.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>reserved</structfield></entry>
|
|
||||||
<entry>This field is reserved for future extensions.
|
|
||||||
Applications and drivers must set it to zero.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u8</entry>
|
|
||||||
<entry><structfield>data</structfield>[48]</entry>
|
|
||||||
<entry>The packet payload. See <xref
|
|
||||||
linkend="vbi-services" /> for the contents and number of
|
|
||||||
bytes passed for each data type. The contents of padding bytes at the
|
|
||||||
end of this array are undefined, drivers and applications shall ignore
|
|
||||||
them.</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<para>Packets are always passed in ascending line number order,
|
|
||||||
without duplicate line numbers. The &func-write; function and the
|
|
||||||
&VIDIOC-QBUF; ioctl must return an &EINVAL; when applications violate
|
|
||||||
this rule. They must also return an &EINVAL; when applications pass an
|
|
||||||
incorrect field or line number, or a combination of
|
|
||||||
<structfield>field</structfield>, <structfield>line</structfield> and
|
|
||||||
<structfield>id</structfield> which has not been negotiated with the
|
|
||||||
&VIDIOC-G-FMT; or &VIDIOC-S-FMT; ioctl. When the line numbers are
|
|
||||||
unknown the driver must pass the packets in transmitted order. The
|
|
||||||
driver can insert empty packets with <structfield>id</structfield> set
|
|
||||||
to zero anywhere in the packet array.</para>
|
|
||||||
|
|
||||||
<para>To assure synchronization and to distinguish from frame
|
|
||||||
dropping, when a captured frame does not carry any of the requested
|
|
||||||
data services drivers must pass one or more empty packets. When an
|
|
||||||
application fails to pass VBI data in time for output, the driver
|
|
||||||
must output the last VPS and WSS packet again, and disable the output
|
|
||||||
of Closed Caption and Teletext data, or output data which is ignored
|
|
||||||
by Closed Caption and Teletext decoders.</para>
|
|
||||||
|
|
||||||
<para>A sliced VBI device may support <link
|
|
||||||
linkend="rw">read/write</link> and/or streaming (<link
|
|
||||||
linkend="mmap">memory mapping</link> and/or <link linkend="userp">user
|
|
||||||
pointer</link>) I/O. The latter bears the possibility of synchronizing
|
|
||||||
video and VBI data by using buffer timestamps.</para>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Sliced VBI Data in MPEG Streams</title>
|
|
||||||
|
|
||||||
<para>If a device can produce an MPEG output stream, it may be
|
|
||||||
capable of providing <link
|
|
||||||
linkend="sliced-vbi-format-negotitation">negotiated sliced VBI
|
|
||||||
services</link> as data embedded in the MPEG stream. Users or
|
|
||||||
applications control this sliced VBI data insertion with the <link
|
|
||||||
linkend="v4l2-mpeg-stream-vbi-fmt">V4L2_CID_MPEG_STREAM_VBI_FMT</link>
|
|
||||||
control.</para>
|
|
||||||
|
|
||||||
<para>If the driver does not provide the <link
|
|
||||||
linkend="v4l2-mpeg-stream-vbi-fmt">V4L2_CID_MPEG_STREAM_VBI_FMT</link>
|
|
||||||
control, or only allows that control to be set to <link
|
|
||||||
linkend="v4l2-mpeg-stream-vbi-fmt"><constant>
|
|
||||||
V4L2_MPEG_STREAM_VBI_FMT_NONE</constant></link>, then the device
|
|
||||||
cannot embed sliced VBI data in the MPEG stream.</para>
|
|
||||||
|
|
||||||
<para>The <link linkend="v4l2-mpeg-stream-vbi-fmt">
|
|
||||||
V4L2_CID_MPEG_STREAM_VBI_FMT</link> control does not implicitly set
|
|
||||||
the device driver to capture nor cease capturing sliced VBI data. The
|
|
||||||
control only indicates to embed sliced VBI data in the MPEG stream, if
|
|
||||||
an application has negotiated sliced VBI service be captured.</para>
|
|
||||||
|
|
||||||
<para>It may also be the case that a device can embed sliced VBI
|
|
||||||
data in only certain types of MPEG streams: for example in an MPEG-2
|
|
||||||
PS but not an MPEG-2 TS. In this situation, if sliced VBI data
|
|
||||||
insertion is requested, the sliced VBI data will be embedded in MPEG
|
|
||||||
stream types when supported, and silently omitted from MPEG stream
|
|
||||||
types where sliced VBI data insertion is not supported by the device.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>The following subsections specify the format of the
|
|
||||||
embedded sliced VBI data.</para>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>MPEG Stream Embedded, Sliced VBI Data Format: NONE</title>
|
|
||||||
<para>The <link linkend="v4l2-mpeg-stream-vbi-fmt"><constant>
|
|
||||||
V4L2_MPEG_STREAM_VBI_FMT_NONE</constant></link> embedded sliced VBI
|
|
||||||
format shall be interpreted by drivers as a control to cease
|
|
||||||
embedding sliced VBI data in MPEG streams. Neither the device nor
|
|
||||||
driver shall insert "empty" embedded sliced VBI data packets in the
|
|
||||||
MPEG stream when this format is set. No MPEG stream data structures
|
|
||||||
are specified for this format.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>MPEG Stream Embedded, Sliced VBI Data Format: IVTV</title>
|
|
||||||
<para>The <link linkend="v4l2-mpeg-stream-vbi-fmt"><constant>
|
|
||||||
V4L2_MPEG_STREAM_VBI_FMT_IVTV</constant></link> embedded sliced VBI
|
|
||||||
format, when supported, indicates to the driver to embed up to 36
|
|
||||||
lines of sliced VBI data per frame in an MPEG-2 <emphasis>Private
|
|
||||||
Stream 1 PES</emphasis> packet encapsulated in an MPEG-2 <emphasis>
|
|
||||||
Program Pack</emphasis> in the MPEG stream.</para>
|
|
||||||
|
|
||||||
<para><emphasis>Historical context</emphasis>: This format
|
|
||||||
specification originates from a custom, embedded, sliced VBI data
|
|
||||||
format used by the <filename>ivtv</filename> driver. This format
|
|
||||||
has already been informally specified in the kernel sources in the
|
|
||||||
file <filename>Documentation/video4linux/cx2341x/README.vbi</filename>
|
|
||||||
. The maximum size of the payload and other aspects of this format
|
|
||||||
are driven by the CX23415 MPEG decoder's capabilities and limitations
|
|
||||||
with respect to extracting, decoding, and displaying sliced VBI data
|
|
||||||
embedded within an MPEG stream.</para>
|
|
||||||
|
|
||||||
<para>This format's use is <emphasis>not</emphasis> exclusive to
|
|
||||||
the <filename>ivtv</filename> driver <emphasis>nor</emphasis>
|
|
||||||
exclusive to CX2341x devices, as the sliced VBI data packet insertion
|
|
||||||
into the MPEG stream is implemented in driver software. At least the
|
|
||||||
<filename>cx18</filename> driver provides sliced VBI data insertion
|
|
||||||
into an MPEG-2 PS in this format as well.</para>
|
|
||||||
|
|
||||||
<para>The following definitions specify the payload of the
|
|
||||||
MPEG-2 <emphasis>Private Stream 1 PES</emphasis> packets that contain
|
|
||||||
sliced VBI data when <link linkend="v4l2-mpeg-stream-vbi-fmt">
|
|
||||||
<constant>V4L2_MPEG_STREAM_VBI_FMT_IVTV</constant></link> is set.
|
|
||||||
(The MPEG-2 <emphasis>Private Stream 1 PES</emphasis> packet header
|
|
||||||
and encapsulating MPEG-2 <emphasis>Program Pack</emphasis> header are
|
|
||||||
not detailed here. Please refer to the MPEG-2 specifications for
|
|
||||||
details on those packet headers.)</para>
|
|
||||||
|
|
||||||
<para>The payload of the MPEG-2 <emphasis>Private Stream 1 PES
|
|
||||||
</emphasis> packets that contain sliced VBI data is specified by
|
|
||||||
&v4l2-mpeg-vbi-fmt-ivtv;. The payload is variable
|
|
||||||
length, depending on the actual number of lines of sliced VBI data
|
|
||||||
present in a video frame. The payload may be padded at the end with
|
|
||||||
unspecified fill bytes to align the end of the payload to a 4-byte
|
|
||||||
boundary. The payload shall never exceed 1552 bytes (2 fields with
|
|
||||||
18 lines/field with 43 bytes of data/line and a 4 byte magic number).
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<table frame="none" pgwide="1" id="v4l2-mpeg-vbi-fmt-ivtv">
|
|
||||||
<title>struct <structname>v4l2_mpeg_vbi_fmt_ivtv</structname>
|
|
||||||
</title>
|
|
||||||
<tgroup cols="4">
|
|
||||||
&cs-ustr;
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry>__u8</entry>
|
|
||||||
<entry><structfield>magic</structfield>[4]</entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>A "magic" constant from <xref
|
|
||||||
linkend="v4l2-mpeg-vbi-fmt-ivtv-magic" /> that indicates
|
|
||||||
this is a valid sliced VBI data payload and also indicates which
|
|
||||||
member of the anonymous union, <structfield>itv0</structfield> or
|
|
||||||
<structfield>ITV0</structfield>, to use for the payload data.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>union</entry>
|
|
||||||
<entry>(anonymous)</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>struct <link linkend="v4l2-mpeg-vbi-itv0">
|
|
||||||
<structname>v4l2_mpeg_vbi_itv0</structname></link>
|
|
||||||
</entry>
|
|
||||||
<entry><structfield>itv0</structfield></entry>
|
|
||||||
<entry>The primary form of the sliced VBI data payload
|
|
||||||
that contains anywhere from 1 to 35 lines of sliced VBI data.
|
|
||||||
Line masks are provided in this form of the payload indicating
|
|
||||||
which VBI lines are provided.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>struct <link linkend="v4l2-mpeg-vbi-itv0-1">
|
|
||||||
<structname>v4l2_mpeg_vbi_ITV0</structname></link>
|
|
||||||
</entry>
|
|
||||||
<entry><structfield>ITV0</structfield></entry>
|
|
||||||
<entry>An alternate form of the sliced VBI data payload
|
|
||||||
used when 36 lines of sliced VBI data are present. No line masks are
|
|
||||||
provided in this form of the payload; all valid line mask bits are
|
|
||||||
implcitly set.</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<table frame="none" pgwide="1" id="v4l2-mpeg-vbi-fmt-ivtv-magic">
|
|
||||||
<title>Magic Constants for &v4l2-mpeg-vbi-fmt-ivtv;
|
|
||||||
<structfield>magic</structfield> field</title>
|
|
||||||
<tgroup cols="3">
|
|
||||||
&cs-def;
|
|
||||||
<thead>
|
|
||||||
<row>
|
|
||||||
<entry align="left">Defined Symbol</entry>
|
|
||||||
<entry align="left">Value</entry>
|
|
||||||
<entry align="left">Description</entry>
|
|
||||||
</row>
|
|
||||||
</thead>
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry><constant>V4L2_MPEG_VBI_IVTV_MAGIC0</constant>
|
|
||||||
</entry>
|
|
||||||
<entry>"itv0"</entry>
|
|
||||||
<entry>Indicates the <structfield>itv0</structfield>
|
|
||||||
member of the union in &v4l2-mpeg-vbi-fmt-ivtv; is valid.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry><constant>V4L2_MPEG_VBI_IVTV_MAGIC1</constant>
|
|
||||||
</entry>
|
|
||||||
<entry>"ITV0"</entry>
|
|
||||||
<entry>Indicates the <structfield>ITV0</structfield>
|
|
||||||
member of the union in &v4l2-mpeg-vbi-fmt-ivtv; is valid and
|
|
||||||
that 36 lines of sliced VBI data are present.</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<table frame="none" pgwide="1" id="v4l2-mpeg-vbi-itv0">
|
|
||||||
<title>struct <structname>v4l2_mpeg_vbi_itv0</structname>
|
|
||||||
</title>
|
|
||||||
<tgroup cols="3">
|
|
||||||
&cs-str;
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry>__le32</entry>
|
|
||||||
<entry><structfield>linemask</structfield>[2]</entry>
|
|
||||||
<entry><para>Bitmasks indicating the VBI service lines
|
|
||||||
present. These <structfield>linemask</structfield> values are stored
|
|
||||||
in little endian byte order in the MPEG stream. Some reference
|
|
||||||
<structfield>linemask</structfield> bit positions with their
|
|
||||||
corresponding VBI line number and video field are given below.
|
|
||||||
b<subscript>0</subscript> indicates the least significant bit of a
|
|
||||||
<structfield>linemask</structfield> value:<screen>
|
|
||||||
<structfield>linemask</structfield>[0] b<subscript>0</subscript>: line 6 first field
|
|
||||||
<structfield>linemask</structfield>[0] b<subscript>17</subscript>: line 23 first field
|
|
||||||
<structfield>linemask</structfield>[0] b<subscript>18</subscript>: line 6 second field
|
|
||||||
<structfield>linemask</structfield>[0] b<subscript>31</subscript>: line 19 second field
|
|
||||||
<structfield>linemask</structfield>[1] b<subscript>0</subscript>: line 20 second field
|
|
||||||
<structfield>linemask</structfield>[1] b<subscript>3</subscript>: line 23 second field
|
|
||||||
<structfield>linemask</structfield>[1] b<subscript>4</subscript>-b<subscript>31</subscript>: unused and set to 0</screen></para></entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>struct <link linkend="v4l2-mpeg-vbi-itv0-line">
|
|
||||||
<structname>v4l2_mpeg_vbi_itv0_line</structname></link>
|
|
||||||
</entry>
|
|
||||||
<entry><structfield>line</structfield>[35]</entry>
|
|
||||||
<entry>This is a variable length array that holds from 1
|
|
||||||
to 35 lines of sliced VBI data. The sliced VBI data lines present
|
|
||||||
correspond to the bits set in the <structfield>linemask</structfield>
|
|
||||||
array, starting from b<subscript>0</subscript> of <structfield>
|
|
||||||
linemask</structfield>[0] up through b<subscript>31</subscript> of
|
|
||||||
<structfield>linemask</structfield>[0], and from b<subscript>0
|
|
||||||
</subscript> of <structfield>linemask</structfield>[1] up through b
|
|
||||||
<subscript>3</subscript> of <structfield>linemask</structfield>[1].
|
|
||||||
<structfield>line</structfield>[0] corresponds to the first bit
|
|
||||||
found set in the <structfield>linemask</structfield> array,
|
|
||||||
<structfield>line</structfield>[1] corresponds to the second bit
|
|
||||||
found set in the <structfield>linemask</structfield> array, etc.
|
|
||||||
If no <structfield>linemask</structfield> array bits are set, then
|
|
||||||
<structfield>line</structfield>[0] may contain one line of
|
|
||||||
unspecified data that should be ignored by applications.</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<table frame="none" pgwide="1" id="v4l2-mpeg-vbi-itv0-1">
|
|
||||||
<title>struct <structname>v4l2_mpeg_vbi_ITV0</structname>
|
|
||||||
</title>
|
|
||||||
<tgroup cols="3">
|
|
||||||
&cs-str;
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry>struct <link linkend="v4l2-mpeg-vbi-itv0-line">
|
|
||||||
<structname>v4l2_mpeg_vbi_itv0_line</structname></link>
|
|
||||||
</entry>
|
|
||||||
<entry><structfield>line</structfield>[36]</entry>
|
|
||||||
<entry>A fixed length array of 36 lines of sliced VBI
|
|
||||||
data. <structfield>line</structfield>[0] through <structfield>line
|
|
||||||
</structfield>[17] correspond to lines 6 through 23 of the
|
|
||||||
first field. <structfield>line</structfield>[18] through
|
|
||||||
<structfield>line</structfield>[35] corresponds to lines 6
|
|
||||||
through 23 of the second field.</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<table frame="none" pgwide="1" id="v4l2-mpeg-vbi-itv0-line">
|
|
||||||
<title>struct <structname>v4l2_mpeg_vbi_itv0_line</structname>
|
|
||||||
</title>
|
|
||||||
<tgroup cols="3">
|
|
||||||
&cs-str;
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry>__u8</entry>
|
|
||||||
<entry><structfield>id</structfield></entry>
|
|
||||||
<entry>A line identifier value from
|
|
||||||
<xref linkend="ITV0-Line-Identifier-Constants" /> that indicates
|
|
||||||
the type of sliced VBI data stored on this line.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u8</entry>
|
|
||||||
<entry><structfield>data</structfield>[42]</entry>
|
|
||||||
<entry>The sliced VBI data for the line.</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<table frame="none" pgwide="1" id="ITV0-Line-Identifier-Constants">
|
|
||||||
<title>Line Identifiers for struct <link
|
|
||||||
linkend="v4l2-mpeg-vbi-itv0-line"><structname>
|
|
||||||
v4l2_mpeg_vbi_itv0_line</structname></link> <structfield>id
|
|
||||||
</structfield> field</title>
|
|
||||||
<tgroup cols="3">
|
|
||||||
&cs-def;
|
|
||||||
<thead>
|
|
||||||
<row>
|
|
||||||
<entry align="left">Defined Symbol</entry>
|
|
||||||
<entry align="left">Value</entry>
|
|
||||||
<entry align="left">Description</entry>
|
|
||||||
</row>
|
|
||||||
</thead>
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry><constant>V4L2_MPEG_VBI_IVTV_TELETEXT_B</constant>
|
|
||||||
</entry>
|
|
||||||
<entry>1</entry>
|
|
||||||
<entry>Refer to <link linkend="vbi-services2">
|
|
||||||
Sliced VBI services</link> for a description of the line payload.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry><constant>V4L2_MPEG_VBI_IVTV_CAPTION_525</constant>
|
|
||||||
</entry>
|
|
||||||
<entry>4</entry>
|
|
||||||
<entry>Refer to <link linkend="vbi-services2">
|
|
||||||
Sliced VBI services</link> for a description of the line payload.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry><constant>V4L2_MPEG_VBI_IVTV_WSS_625</constant>
|
|
||||||
</entry>
|
|
||||||
<entry>5</entry>
|
|
||||||
<entry>Refer to <link linkend="vbi-services2">
|
|
||||||
Sliced VBI services</link> for a description of the line payload.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry><constant>V4L2_MPEG_VBI_IVTV_VPS</constant>
|
|
||||||
</entry>
|
|
||||||
<entry>7</entry>
|
|
||||||
<entry>Refer to <link linkend="vbi-services2">
|
|
||||||
Sliced VBI services</link> for a description of the line payload.</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
</section>
|
|
||||||
@@ -1,478 +0,0 @@
|
|||||||
<title>Sub-device Interface</title>
|
|
||||||
|
|
||||||
<para>The complex nature of V4L2 devices, where hardware is often made of
|
|
||||||
several integrated circuits that need to interact with each other in a
|
|
||||||
controlled way, leads to complex V4L2 drivers. The drivers usually reflect
|
|
||||||
the hardware model in software, and model the different hardware components
|
|
||||||
as software blocks called sub-devices.</para>
|
|
||||||
|
|
||||||
<para>V4L2 sub-devices are usually kernel-only objects. If the V4L2 driver
|
|
||||||
implements the media device API, they will automatically inherit from media
|
|
||||||
entities. Applications will be able to enumerate the sub-devices and discover
|
|
||||||
the hardware topology using the media entities, pads and links enumeration
|
|
||||||
API.</para>
|
|
||||||
|
|
||||||
<para>In addition to make sub-devices discoverable, drivers can also choose
|
|
||||||
to make them directly configurable by applications. When both the sub-device
|
|
||||||
driver and the V4L2 device driver support this, sub-devices will feature a
|
|
||||||
character device node on which ioctls can be called to
|
|
||||||
<itemizedlist>
|
|
||||||
<listitem><para>query, read and write sub-devices controls</para></listitem>
|
|
||||||
<listitem><para>subscribe and unsubscribe to events and retrieve them</para></listitem>
|
|
||||||
<listitem><para>negotiate image formats on individual pads</para></listitem>
|
|
||||||
</itemizedlist>
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>Sub-device character device nodes, conventionally named
|
|
||||||
<filename>/dev/v4l-subdev*</filename>, use major number 81.</para>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Controls</title>
|
|
||||||
<para>Most V4L2 controls are implemented by sub-device hardware. Drivers
|
|
||||||
usually merge all controls and expose them through video device nodes.
|
|
||||||
Applications can control all sub-devices through a single interface.</para>
|
|
||||||
|
|
||||||
<para>Complex devices sometimes implement the same control in different
|
|
||||||
pieces of hardware. This situation is common in embedded platforms, where
|
|
||||||
both sensors and image processing hardware implement identical functions,
|
|
||||||
such as contrast adjustment, white balance or faulty pixels correction. As
|
|
||||||
the V4L2 controls API doesn't support several identical controls in a single
|
|
||||||
device, all but one of the identical controls are hidden.</para>
|
|
||||||
|
|
||||||
<para>Applications can access those hidden controls through the sub-device
|
|
||||||
node with the V4L2 control API described in <xref linkend="control" />. The
|
|
||||||
ioctls behave identically as when issued on V4L2 device nodes, with the
|
|
||||||
exception that they deal only with controls implemented in the sub-device.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>Depending on the driver, those controls might also be exposed through
|
|
||||||
one (or several) V4L2 device nodes.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Events</title>
|
|
||||||
<para>V4L2 sub-devices can notify applications of events as described in
|
|
||||||
<xref linkend="event" />. The API behaves identically as when used on V4L2
|
|
||||||
device nodes, with the exception that it only deals with events generated by
|
|
||||||
the sub-device. Depending on the driver, those events might also be reported
|
|
||||||
on one (or several) V4L2 device nodes.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="pad-level-formats">
|
|
||||||
<title>Pad-level Formats</title>
|
|
||||||
|
|
||||||
<warning><para>Pad-level formats are only applicable to very complex device that
|
|
||||||
need to expose low-level format configuration to user space. Generic V4L2
|
|
||||||
applications do <emphasis>not</emphasis> need to use the API described in
|
|
||||||
this section.</para></warning>
|
|
||||||
|
|
||||||
<note><para>For the purpose of this section, the term
|
|
||||||
<wordasword>format</wordasword> means the combination of media bus data
|
|
||||||
format, frame width and frame height.</para></note>
|
|
||||||
|
|
||||||
<para>Image formats are typically negotiated on video capture and
|
|
||||||
output devices using the format and <link
|
|
||||||
linkend="vidioc-subdev-g-selection">selection</link> ioctls. The
|
|
||||||
driver is responsible for configuring every block in the video
|
|
||||||
pipeline according to the requested format at the pipeline input
|
|
||||||
and/or output.</para>
|
|
||||||
|
|
||||||
<para>For complex devices, such as often found in embedded systems,
|
|
||||||
identical image sizes at the output of a pipeline can be achieved using
|
|
||||||
different hardware configurations. One such example is shown on
|
|
||||||
<xref linkend="pipeline-scaling" />, where
|
|
||||||
image scaling can be performed on both the video sensor and the host image
|
|
||||||
processing hardware.</para>
|
|
||||||
|
|
||||||
<figure id="pipeline-scaling">
|
|
||||||
<title>Image Format Negotiation on Pipelines</title>
|
|
||||||
<mediaobject>
|
|
||||||
<imageobject>
|
|
||||||
<imagedata fileref="pipeline.pdf" format="PS" />
|
|
||||||
</imageobject>
|
|
||||||
<imageobject>
|
|
||||||
<imagedata fileref="pipeline.png" format="PNG" />
|
|
||||||
</imageobject>
|
|
||||||
<textobject>
|
|
||||||
<phrase>High quality and high speed pipeline configuration</phrase>
|
|
||||||
</textobject>
|
|
||||||
</mediaobject>
|
|
||||||
</figure>
|
|
||||||
|
|
||||||
<para>The sensor scaler is usually of less quality than the host scaler, but
|
|
||||||
scaling on the sensor is required to achieve higher frame rates. Depending
|
|
||||||
on the use case (quality vs. speed), the pipeline must be configured
|
|
||||||
differently. Applications need to configure the formats at every point in
|
|
||||||
the pipeline explicitly.</para>
|
|
||||||
|
|
||||||
<para>Drivers that implement the <link linkend="media-controller-intro">media
|
|
||||||
API</link> can expose pad-level image format configuration to applications.
|
|
||||||
When they do, applications can use the &VIDIOC-SUBDEV-G-FMT; and
|
|
||||||
&VIDIOC-SUBDEV-S-FMT; ioctls. to negotiate formats on a per-pad basis.</para>
|
|
||||||
|
|
||||||
<para>Applications are responsible for configuring coherent parameters on
|
|
||||||
the whole pipeline and making sure that connected pads have compatible
|
|
||||||
formats. The pipeline is checked for formats mismatch at &VIDIOC-STREAMON;
|
|
||||||
time, and an &EPIPE; is then returned if the configuration is
|
|
||||||
invalid.</para>
|
|
||||||
|
|
||||||
<para>Pad-level image format configuration support can be tested by calling
|
|
||||||
the &VIDIOC-SUBDEV-G-FMT; ioctl on pad 0. If the driver returns an &EINVAL;
|
|
||||||
pad-level format configuration is not supported by the sub-device.</para>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Format Negotiation</title>
|
|
||||||
|
|
||||||
<para>Acceptable formats on pads can (and usually do) depend on a number
|
|
||||||
of external parameters, such as formats on other pads, active links, or
|
|
||||||
even controls. Finding a combination of formats on all pads in a video
|
|
||||||
pipeline, acceptable to both application and driver, can't rely on formats
|
|
||||||
enumeration only. A format negotiation mechanism is required.</para>
|
|
||||||
|
|
||||||
<para>Central to the format negotiation mechanism are the get/set format
|
|
||||||
operations. When called with the <structfield>which</structfield> argument
|
|
||||||
set to <constant>V4L2_SUBDEV_FORMAT_TRY</constant>, the
|
|
||||||
&VIDIOC-SUBDEV-G-FMT; and &VIDIOC-SUBDEV-S-FMT; ioctls operate on a set of
|
|
||||||
formats parameters that are not connected to the hardware configuration.
|
|
||||||
Modifying those 'try' formats leaves the device state untouched (this
|
|
||||||
applies to both the software state stored in the driver and the hardware
|
|
||||||
state stored in the device itself).</para>
|
|
||||||
|
|
||||||
<para>While not kept as part of the device state, try formats are stored
|
|
||||||
in the sub-device file handles. A &VIDIOC-SUBDEV-G-FMT; call will return
|
|
||||||
the last try format set <emphasis>on the same sub-device file
|
|
||||||
handle</emphasis>. Several applications querying the same sub-device at
|
|
||||||
the same time will thus not interact with each other.</para>
|
|
||||||
|
|
||||||
<para>To find out whether a particular format is supported by the device,
|
|
||||||
applications use the &VIDIOC-SUBDEV-S-FMT; ioctl. Drivers verify and, if
|
|
||||||
needed, change the requested <structfield>format</structfield> based on
|
|
||||||
device requirements and return the possibly modified value. Applications
|
|
||||||
can then choose to try a different format or accept the returned value and
|
|
||||||
continue.</para>
|
|
||||||
|
|
||||||
<para>Formats returned by the driver during a negotiation iteration are
|
|
||||||
guaranteed to be supported by the device. In particular, drivers guarantee
|
|
||||||
that a returned format will not be further changed if passed to an
|
|
||||||
&VIDIOC-SUBDEV-S-FMT; call as-is (as long as external parameters, such as
|
|
||||||
formats on other pads or links' configuration are not changed).</para>
|
|
||||||
|
|
||||||
<para>Drivers automatically propagate formats inside sub-devices. When a
|
|
||||||
try or active format is set on a pad, corresponding formats on other pads
|
|
||||||
of the same sub-device can be modified by the driver. Drivers are free to
|
|
||||||
modify formats as required by the device. However, they should comply with
|
|
||||||
the following rules when possible:
|
|
||||||
<itemizedlist>
|
|
||||||
<listitem><para>Formats should be propagated from sink pads to source pads.
|
|
||||||
Modifying a format on a source pad should not modify the format on any
|
|
||||||
sink pad.</para></listitem>
|
|
||||||
<listitem><para>Sub-devices that scale frames using variable scaling factors
|
|
||||||
should reset the scale factors to default values when sink pads formats
|
|
||||||
are modified. If the 1:1 scaling ratio is supported, this means that
|
|
||||||
source pads formats should be reset to the sink pads formats.</para></listitem>
|
|
||||||
</itemizedlist>
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>Formats are not propagated across links, as that would involve
|
|
||||||
propagating them from one sub-device file handle to another. Applications
|
|
||||||
must then take care to configure both ends of every link explicitly with
|
|
||||||
compatible formats. Identical formats on the two ends of a link are
|
|
||||||
guaranteed to be compatible. Drivers are free to accept different formats
|
|
||||||
matching device requirements as being compatible.</para>
|
|
||||||
|
|
||||||
<para><xref linkend="sample-pipeline-config" />
|
|
||||||
shows a sample configuration sequence for the pipeline described in
|
|
||||||
<xref linkend="pipeline-scaling" /> (table
|
|
||||||
columns list entity names and pad numbers).</para>
|
|
||||||
|
|
||||||
<table pgwide="0" frame="none" id="sample-pipeline-config">
|
|
||||||
<title>Sample Pipeline Configuration</title>
|
|
||||||
<tgroup cols="3">
|
|
||||||
<colspec colname="what"/>
|
|
||||||
<colspec colname="sensor-0 format" />
|
|
||||||
<colspec colname="frontend-0 format" />
|
|
||||||
<colspec colname="frontend-1 format" />
|
|
||||||
<colspec colname="scaler-0 format" />
|
|
||||||
<colspec colname="scaler-0 compose" />
|
|
||||||
<colspec colname="scaler-1 format" />
|
|
||||||
<thead>
|
|
||||||
<row>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>Sensor/0 format</entry>
|
|
||||||
<entry>Frontend/0 format</entry>
|
|
||||||
<entry>Frontend/1 format</entry>
|
|
||||||
<entry>Scaler/0 format</entry>
|
|
||||||
<entry>Scaler/0 compose selection rectangle</entry>
|
|
||||||
<entry>Scaler/1 format</entry>
|
|
||||||
</row>
|
|
||||||
</thead>
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry>Initial state</entry>
|
|
||||||
<entry>2048x1536/SGRBG8_1X8</entry>
|
|
||||||
<entry>(default)</entry>
|
|
||||||
<entry>(default)</entry>
|
|
||||||
<entry>(default)</entry>
|
|
||||||
<entry>(default)</entry>
|
|
||||||
<entry>(default)</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>Configure frontend sink format</entry>
|
|
||||||
<entry>2048x1536/SGRBG8_1X8</entry>
|
|
||||||
<entry><emphasis>2048x1536/SGRBG8_1X8</emphasis></entry>
|
|
||||||
<entry><emphasis>2046x1534/SGRBG8_1X8</emphasis></entry>
|
|
||||||
<entry>(default)</entry>
|
|
||||||
<entry>(default)</entry>
|
|
||||||
<entry>(default)</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>Configure scaler sink format</entry>
|
|
||||||
<entry>2048x1536/SGRBG8_1X8</entry>
|
|
||||||
<entry>2048x1536/SGRBG8_1X8</entry>
|
|
||||||
<entry>2046x1534/SGRBG8_1X8</entry>
|
|
||||||
<entry><emphasis>2046x1534/SGRBG8_1X8</emphasis></entry>
|
|
||||||
<entry><emphasis>0,0/2046x1534</emphasis></entry>
|
|
||||||
<entry><emphasis>2046x1534/SGRBG8_1X8</emphasis></entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>Configure scaler sink compose selection</entry>
|
|
||||||
<entry>2048x1536/SGRBG8_1X8</entry>
|
|
||||||
<entry>2048x1536/SGRBG8_1X8</entry>
|
|
||||||
<entry>2046x1534/SGRBG8_1X8</entry>
|
|
||||||
<entry>2046x1534/SGRBG8_1X8</entry>
|
|
||||||
<entry><emphasis>0,0/1280x960</emphasis></entry>
|
|
||||||
<entry><emphasis>1280x960/SGRBG8_1X8</emphasis></entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
<orderedlist>
|
|
||||||
<listitem><para>Initial state. The sensor source pad format is
|
|
||||||
set to its native 3MP size and V4L2_MBUS_FMT_SGRBG8_1X8
|
|
||||||
media bus code. Formats on the host frontend and scaler sink
|
|
||||||
and source pads have the default values, as well as the
|
|
||||||
compose rectangle on the scaler's sink pad.</para></listitem>
|
|
||||||
|
|
||||||
<listitem><para>The application configures the frontend sink
|
|
||||||
pad format's size to 2048x1536 and its media bus code to
|
|
||||||
V4L2_MBUS_FMT_SGRBG_1X8. The driver propagates the format to
|
|
||||||
the frontend source pad.</para></listitem>
|
|
||||||
|
|
||||||
<listitem><para>The application configures the scaler sink pad
|
|
||||||
format's size to 2046x1534 and the media bus code to
|
|
||||||
V4L2_MBUS_FMT_SGRBG_1X8 to match the frontend source size and
|
|
||||||
media bus code. The media bus code on the sink pad is set to
|
|
||||||
V4L2_MBUS_FMT_SGRBG_1X8. The driver propagates the size to the
|
|
||||||
compose selection rectangle on the scaler's sink pad, and the
|
|
||||||
format to the scaler source pad.</para></listitem>
|
|
||||||
|
|
||||||
<listitem><para>The application configures the size of the compose
|
|
||||||
selection rectangle of the scaler's sink pad 1280x960. The driver
|
|
||||||
propagates the size to the scaler's source pad
|
|
||||||
format.</para></listitem>
|
|
||||||
|
|
||||||
</orderedlist>
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>When satisfied with the try results, applications can set the active
|
|
||||||
formats by setting the <structfield>which</structfield> argument to
|
|
||||||
<constant>V4L2_SUBDEV_FORMAT_ACTIVE</constant>. Active formats are changed
|
|
||||||
exactly as try formats by drivers. To avoid modifying the hardware state
|
|
||||||
during format negotiation, applications should negotiate try formats first
|
|
||||||
and then modify the active settings using the try formats returned during
|
|
||||||
the last negotiation iteration. This guarantees that the active format
|
|
||||||
will be applied as-is by the driver without being modified.
|
|
||||||
</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="v4l2-subdev-selections">
|
|
||||||
<title>Selections: cropping, scaling and composition</title>
|
|
||||||
|
|
||||||
<para>Many sub-devices support cropping frames on their input or output
|
|
||||||
pads (or possible even on both). Cropping is used to select the area of
|
|
||||||
interest in an image, typically on an image sensor or a video decoder. It can
|
|
||||||
also be used as part of digital zoom implementations to select the area of
|
|
||||||
the image that will be scaled up.</para>
|
|
||||||
|
|
||||||
<para>Crop settings are defined by a crop rectangle and represented in a
|
|
||||||
&v4l2-rect; by the coordinates of the top left corner and the rectangle
|
|
||||||
size. Both the coordinates and sizes are expressed in pixels.</para>
|
|
||||||
|
|
||||||
<para>As for pad formats, drivers store try and active
|
|
||||||
rectangles for the selection targets <xref
|
|
||||||
linkend="v4l2-selections-common" />.</para>
|
|
||||||
|
|
||||||
<para>On sink pads, cropping is applied relative to the
|
|
||||||
current pad format. The pad format represents the image size as
|
|
||||||
received by the sub-device from the previous block in the
|
|
||||||
pipeline, and the crop rectangle represents the sub-image that
|
|
||||||
will be transmitted further inside the sub-device for
|
|
||||||
processing.</para>
|
|
||||||
|
|
||||||
<para>The scaling operation changes the size of the image by
|
|
||||||
scaling it to new dimensions. The scaling ratio isn't specified
|
|
||||||
explicitly, but is implied from the original and scaled image
|
|
||||||
sizes. Both sizes are represented by &v4l2-rect;.</para>
|
|
||||||
|
|
||||||
<para>Scaling support is optional. When supported by a subdev,
|
|
||||||
the crop rectangle on the subdev's sink pad is scaled to the
|
|
||||||
size configured using the &VIDIOC-SUBDEV-S-SELECTION; IOCTL
|
|
||||||
using <constant>V4L2_SEL_TGT_COMPOSE</constant>
|
|
||||||
selection target on the same pad. If the subdev supports scaling
|
|
||||||
but not composing, the top and left values are not used and must
|
|
||||||
always be set to zero.</para>
|
|
||||||
|
|
||||||
<para>On source pads, cropping is similar to sink pads, with the
|
|
||||||
exception that the source size from which the cropping is
|
|
||||||
performed, is the COMPOSE rectangle on the sink pad. In both
|
|
||||||
sink and source pads, the crop rectangle must be entirely
|
|
||||||
contained inside the source image size for the crop
|
|
||||||
operation.</para>
|
|
||||||
|
|
||||||
<para>The drivers should always use the closest possible
|
|
||||||
rectangle the user requests on all selection targets, unless
|
|
||||||
specifically told otherwise.
|
|
||||||
<constant>V4L2_SEL_FLAG_GE</constant> and
|
|
||||||
<constant>V4L2_SEL_FLAG_LE</constant> flags may be
|
|
||||||
used to round the image size either up or down. <xref
|
|
||||||
linkend="v4l2-selection-flags" /></para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Types of selection targets</title>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Actual targets</title>
|
|
||||||
|
|
||||||
<para>Actual targets (without a postfix) reflect the actual
|
|
||||||
hardware configuration at any point of time. There is a BOUNDS
|
|
||||||
target corresponding to every actual target.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>BOUNDS targets</title>
|
|
||||||
|
|
||||||
<para>BOUNDS targets is the smallest rectangle that contains all
|
|
||||||
valid actual rectangles. It may not be possible to set the actual
|
|
||||||
rectangle as large as the BOUNDS rectangle, however. This may be
|
|
||||||
because e.g. a sensor's pixel array is not rectangular but
|
|
||||||
cross-shaped or round. The maximum size may also be smaller than the
|
|
||||||
BOUNDS rectangle.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<title>Order of configuration and format propagation</title>
|
|
||||||
|
|
||||||
<para>Inside subdevs, the order of image processing steps will
|
|
||||||
always be from the sink pad towards the source pad. This is also
|
|
||||||
reflected in the order in which the configuration must be
|
|
||||||
performed by the user: the changes made will be propagated to
|
|
||||||
any subsequent stages. If this behaviour is not desired, the
|
|
||||||
user must set
|
|
||||||
<constant>V4L2_SEL_FLAG_KEEP_CONFIG</constant> flag. This
|
|
||||||
flag causes no propagation of the changes are allowed in any
|
|
||||||
circumstances. This may also cause the accessed rectangle to be
|
|
||||||
adjusted by the driver, depending on the properties of the
|
|
||||||
underlying hardware.</para>
|
|
||||||
|
|
||||||
<para>The coordinates to a step always refer to the actual size
|
|
||||||
of the previous step. The exception to this rule is the source
|
|
||||||
compose rectangle, which refers to the sink compose bounds
|
|
||||||
rectangle --- if it is supported by the hardware.</para>
|
|
||||||
|
|
||||||
<orderedlist>
|
|
||||||
<listitem><para>Sink pad format. The user configures the sink pad
|
|
||||||
format. This format defines the parameters of the image the
|
|
||||||
entity receives through the pad for further processing.</para></listitem>
|
|
||||||
|
|
||||||
<listitem><para>Sink pad actual crop selection. The sink pad crop
|
|
||||||
defines the crop performed to the sink pad format.</para></listitem>
|
|
||||||
|
|
||||||
<listitem><para>Sink pad actual compose selection. The size of the
|
|
||||||
sink pad compose rectangle defines the scaling ratio compared
|
|
||||||
to the size of the sink pad crop rectangle. The location of
|
|
||||||
the compose rectangle specifies the location of the actual
|
|
||||||
sink compose rectangle in the sink compose bounds
|
|
||||||
rectangle.</para></listitem>
|
|
||||||
|
|
||||||
<listitem><para>Source pad actual crop selection. Crop on the source
|
|
||||||
pad defines crop performed to the image in the sink compose
|
|
||||||
bounds rectangle.</para></listitem>
|
|
||||||
|
|
||||||
<listitem><para>Source pad format. The source pad format defines the
|
|
||||||
output pixel format of the subdev, as well as the other
|
|
||||||
parameters with the exception of the image width and height.
|
|
||||||
Width and height are defined by the size of the source pad
|
|
||||||
actual crop selection.</para></listitem>
|
|
||||||
</orderedlist>
|
|
||||||
|
|
||||||
<para>Accessing any of the above rectangles not supported by the
|
|
||||||
subdev will return <constant>EINVAL</constant>. Any rectangle
|
|
||||||
referring to a previous unsupported rectangle coordinates will
|
|
||||||
instead refer to the previous supported rectangle. For example,
|
|
||||||
if sink crop is not supported, the compose selection will refer
|
|
||||||
to the sink pad format dimensions instead.</para>
|
|
||||||
|
|
||||||
<figure id="subdev-image-processing-crop">
|
|
||||||
<title>Image processing in subdevs: simple crop example</title>
|
|
||||||
<mediaobject>
|
|
||||||
<imageobject>
|
|
||||||
<imagedata fileref="subdev-image-processing-crop.svg"
|
|
||||||
format="SVG" scale="200" />
|
|
||||||
</imageobject>
|
|
||||||
</mediaobject>
|
|
||||||
</figure>
|
|
||||||
|
|
||||||
<para>In the above example, the subdev supports cropping on its
|
|
||||||
sink pad. To configure it, the user sets the media bus format on
|
|
||||||
the subdev's sink pad. Now the actual crop rectangle can be set
|
|
||||||
on the sink pad --- the location and size of this rectangle
|
|
||||||
reflect the location and size of a rectangle to be cropped from
|
|
||||||
the sink format. The size of the sink crop rectangle will also
|
|
||||||
be the size of the format of the subdev's source pad.</para>
|
|
||||||
|
|
||||||
<figure id="subdev-image-processing-scaling-multi-source">
|
|
||||||
<title>Image processing in subdevs: scaling with multiple sources</title>
|
|
||||||
<mediaobject>
|
|
||||||
<imageobject>
|
|
||||||
<imagedata fileref="subdev-image-processing-scaling-multi-source.svg"
|
|
||||||
format="SVG" scale="200" />
|
|
||||||
</imageobject>
|
|
||||||
</mediaobject>
|
|
||||||
</figure>
|
|
||||||
|
|
||||||
<para>In this example, the subdev is capable of first cropping,
|
|
||||||
then scaling and finally cropping for two source pads
|
|
||||||
individually from the resulting scaled image. The location of
|
|
||||||
the scaled image in the cropped image is ignored in sink compose
|
|
||||||
target. Both of the locations of the source crop rectangles
|
|
||||||
refer to the sink scaling rectangle, independently cropping an
|
|
||||||
area at location specified by the source crop rectangle from
|
|
||||||
it.</para>
|
|
||||||
|
|
||||||
<figure id="subdev-image-processing-full">
|
|
||||||
<title>Image processing in subdevs: scaling and composition
|
|
||||||
with multiple sinks and sources</title>
|
|
||||||
<mediaobject>
|
|
||||||
<imageobject>
|
|
||||||
<imagedata fileref="subdev-image-processing-full.svg"
|
|
||||||
format="SVG" scale="200" />
|
|
||||||
</imageobject>
|
|
||||||
</mediaobject>
|
|
||||||
</figure>
|
|
||||||
|
|
||||||
<para>The subdev driver supports two sink pads and two source
|
|
||||||
pads. The images from both of the sink pads are individually
|
|
||||||
cropped, then scaled and further composed on the composition
|
|
||||||
bounds rectangle. From that, two independent streams are cropped
|
|
||||||
and sent out of the subdev from the source pads.</para>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
&sub-subdev-formats;
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
<title>Teletext Interface</title>
|
|
||||||
|
|
||||||
<para>This interface was aimed at devices receiving and demodulating
|
|
||||||
Teletext data [<xref linkend="ets300706" />, <xref linkend="itu653" />], evaluating the
|
|
||||||
Teletext packages and storing formatted pages in cache memory. Such
|
|
||||||
devices are usually implemented as microcontrollers with serial
|
|
||||||
interface (I<superscript>2</superscript>C) and could be found on old
|
|
||||||
TV cards, dedicated Teletext decoding cards and home-brew devices
|
|
||||||
connected to the PC parallel port.</para>
|
|
||||||
|
|
||||||
<para>The Teletext API was designed by Martin Buck. It was defined in
|
|
||||||
the kernel header file <filename>linux/videotext.h</filename>, the
|
|
||||||
specification is available from <ulink url="ftp://ftp.gwdg.de/pub/linux/misc/videotext/">
|
|
||||||
ftp://ftp.gwdg.de/pub/linux/misc/videotext/</ulink>. (Videotext is the name of
|
|
||||||
the German public television Teletext service.)</para>
|
|
||||||
|
|
||||||
<para>Eventually the Teletext API was integrated into the V4L API
|
|
||||||
with character device file names <filename>/dev/vtx0</filename> to
|
|
||||||
<filename>/dev/vtx31</filename>, device major number 81, minor numbers
|
|
||||||
192 to 223.</para>
|
|
||||||
|
|
||||||
<para>However, teletext decoders were quickly replaced by more
|
|
||||||
generic VBI demodulators and those dedicated teletext decoders no longer exist.
|
|
||||||
For many years the vtx devices were still around, even though nobody used
|
|
||||||
them. So the decision was made to finally remove support for the Teletext API in
|
|
||||||
kernel 2.6.37.</para>
|
|
||||||
|
|
||||||
<para>Modern devices all use the <link linkend="raw-vbi">raw</link> or
|
|
||||||
<link linkend="sliced">sliced</link> VBI API.</para>
|
|
||||||
@@ -1,200 +0,0 @@
|
|||||||
<title>V4L2 Driver Programming</title>
|
|
||||||
|
|
||||||
<!-- This part defines the interface between the "videodev"
|
|
||||||
module and individual drivers. -->
|
|
||||||
|
|
||||||
<para>to do</para>
|
|
||||||
<!--
|
|
||||||
<para>V4L2 is a two-layer driver system. The top layer is the "videodev"
|
|
||||||
kernel module. When videodev initializes it registers as character device
|
|
||||||
with major number 81, and it registers a set of file operations. All V4L2
|
|
||||||
drivers are really clients of videodev, which calls V4L2 drivers through
|
|
||||||
driver method functions. V4L2 drivers are also written as kernel modules.
|
|
||||||
After probing the hardware they register one or more devices with
|
|
||||||
videodev.</para>
|
|
||||||
|
|
||||||
<section id="driver-modules">
|
|
||||||
<title>Driver Modules</title>
|
|
||||||
|
|
||||||
<para>V4L2 driver modules must have an initialization function which is
|
|
||||||
called after the module was loaded into kernel, an exit function whis is
|
|
||||||
called before the module is removed. When the driver is compiled into the
|
|
||||||
kernel these functions called at system boot and shutdown time.</para>
|
|
||||||
|
|
||||||
<informalexample>
|
|
||||||
<programlisting>
|
|
||||||
#include <linux/module.h>
|
|
||||||
|
|
||||||
/* Export information about this module. For details and other useful
|
|
||||||
macros see <filename>linux/module.h</filename>. */
|
|
||||||
MODULE_DESCRIPTION("my - driver for my hardware");
|
|
||||||
MODULE_AUTHOR("Your name here");
|
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
|
|
||||||
static void
|
|
||||||
my_module_exit (void)
|
|
||||||
{
|
|
||||||
/* Free all resources allocated by my_module_init(). */
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
my_module_init (void)
|
|
||||||
{
|
|
||||||
/* Bind the driver to the supported hardware, see
|
|
||||||
<link linkend="driver-pci"> and
|
|
||||||
<link linkend="driver-usb"> for examples. */
|
|
||||||
|
|
||||||
return 0; /* a negative value on error, 0 on success. */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Export module functions. */
|
|
||||||
module_init (my_module_init);
|
|
||||||
module_exit (my_module_exit);
|
|
||||||
</programlisting>
|
|
||||||
</informalexample>
|
|
||||||
|
|
||||||
<para>Users can add parameters when kernel modules are inserted:</para>
|
|
||||||
|
|
||||||
<informalexample>
|
|
||||||
<programlisting>
|
|
||||||
include <linux/moduleparam.h>
|
|
||||||
|
|
||||||
static int my_option = 123;
|
|
||||||
static int my_option_array[47];
|
|
||||||
|
|
||||||
/* Export the symbol, an int, with access permissions 0664.
|
|
||||||
See <filename>linux/moduleparam.h</filename> for other types. */
|
|
||||||
module_param (my_option, int, 0644);
|
|
||||||
module_param_array (my_option_array, int, NULL, 0644);
|
|
||||||
|
|
||||||
MODULE_PARM_DESC (my_option, "Does magic things, default 123");
|
|
||||||
</programlisting>
|
|
||||||
</informalexample>
|
|
||||||
|
|
||||||
<para>One parameter should be supported by all V4L2 drivers, the minor
|
|
||||||
number of the device it will register. Purpose is to predictably link V4L2
|
|
||||||
drivers to device nodes if more than one video device is installed. Use the
|
|
||||||
name of the device node followed by a "_nr" suffix, for example "video_nr"
|
|
||||||
for <filename>/dev/video</filename>.</para>
|
|
||||||
|
|
||||||
<informalexample>
|
|
||||||
<programlisting>
|
|
||||||
/* Minor number of the device, -1 to allocate the first unused. */
|
|
||||||
static int video_nr = -1;
|
|
||||||
|
|
||||||
module_param (video_nr, int, 0444);
|
|
||||||
</programlisting>
|
|
||||||
</informalexample>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="driver-pci">
|
|
||||||
<title>PCI Devices</title>
|
|
||||||
|
|
||||||
<para>PCI devices are initialized like this:</para>
|
|
||||||
|
|
||||||
<informalexample>
|
|
||||||
<programlisting>
|
|
||||||
typedef struct {
|
|
||||||
/* State of one physical device. */
|
|
||||||
} my_device;
|
|
||||||
|
|
||||||
static int
|
|
||||||
my_resume (struct pci_dev * pci_dev)
|
|
||||||
{
|
|
||||||
/* Restore the suspended device to working state. */
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
my_suspend (struct pci_dev * pci_dev,
|
|
||||||
pm_message_t state)
|
|
||||||
{
|
|
||||||
/* This function is called before the system goes to sleep.
|
|
||||||
Stop all DMAs and disable interrupts, then put the device
|
|
||||||
into a low power state. For details see the kernel
|
|
||||||
sources under <filename>Documentation/power</filename>. */
|
|
||||||
|
|
||||||
return 0; /* a negative value on error, 0 on success. */
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
my_remove (struct pci_dev * pci_dev)
|
|
||||||
{
|
|
||||||
my_device *my = pci_get_drvdata (pci_dev);
|
|
||||||
|
|
||||||
/* Describe me. */
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
my_probe (struct pci_dev * pci_dev,
|
|
||||||
const struct pci_device_id * pci_id)
|
|
||||||
{
|
|
||||||
my_device *my;
|
|
||||||
|
|
||||||
/* Describe me. */
|
|
||||||
|
|
||||||
/* You can allocate per-device data here and store a pointer
|
|
||||||
to it in the pci_dev structure. */
|
|
||||||
my = ...;
|
|
||||||
pci_set_drvdata (pci_dev, my);
|
|
||||||
|
|
||||||
return 0; /* a negative value on error, 0 on success. */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* A list of supported PCI devices. */
|
|
||||||
static struct pci_device_id
|
|
||||||
my_pci_device_ids [] = {
|
|
||||||
{ PCI_VENDOR_ID_FOO, PCI_DEVICE_ID_BAR,
|
|
||||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
|
|
||||||
{ 0 } /* end of list */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Load our module if supported PCI devices are installed. */
|
|
||||||
MODULE_DEVICE_TABLE (pci, my_pci_device_ids);
|
|
||||||
|
|
||||||
static struct pci_driver
|
|
||||||
my_pci_driver = {
|
|
||||||
.name = "my",
|
|
||||||
.id_table = my_pci_device_ids,
|
|
||||||
|
|
||||||
.probe = my_probe,
|
|
||||||
.remove = my_remove,
|
|
||||||
|
|
||||||
/* Power management functions. */
|
|
||||||
.suspend = my_suspend,
|
|
||||||
.resume = my_resume,
|
|
||||||
};
|
|
||||||
|
|
||||||
static void
|
|
||||||
my_module_exit (void)
|
|
||||||
{
|
|
||||||
pci_unregister_driver (&my_pci_driver);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
my_module_init (void)
|
|
||||||
{
|
|
||||||
return pci_register_driver (&my_pci_driver);
|
|
||||||
}
|
|
||||||
</programlisting>
|
|
||||||
</informalexample>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="driver-usb">
|
|
||||||
<title>USB Devices</title>
|
|
||||||
<para>to do</para>
|
|
||||||
</section>
|
|
||||||
<section id="driver-registering">
|
|
||||||
<title>Registering V4L2 Drivers</title>
|
|
||||||
|
|
||||||
<para>After a V4L2 driver probed the hardware it registers one or more
|
|
||||||
devices with the videodev module.</para>
|
|
||||||
</section>
|
|
||||||
<section id="driver-file-ops">
|
|
||||||
<title>File Operations</title>
|
|
||||||
<para>to do</para>
|
|
||||||
</section>
|
|
||||||
<section id="driver-internal-api">
|
|
||||||
<title>Internal API</title>
|
|
||||||
<para>to do</para>
|
|
||||||
</section>
|
|
||||||
-->
|
|
||||||
@@ -1,671 +0,0 @@
|
|||||||
<!--
|
|
||||||
The GNU Free Documentation License 1.1 in DocBook
|
|
||||||
Markup by Eric Baudais <baudais@okstate.edu>
|
|
||||||
Maintained by the GNOME Documentation Project
|
|
||||||
http://live.gnome.org/DocumentationProject
|
|
||||||
Version: 1.0.1
|
|
||||||
Last Modified: Nov 16, 2000
|
|
||||||
-->
|
|
||||||
|
|
||||||
<appendix id="fdl">
|
|
||||||
<appendixinfo>
|
|
||||||
<releaseinfo>
|
|
||||||
Version 1.1, March 2000
|
|
||||||
</releaseinfo>
|
|
||||||
<copyright>
|
|
||||||
<year>2000</year><holder>Free Software Foundation, Inc.</holder>
|
|
||||||
</copyright>
|
|
||||||
<legalnotice id="fdl-legalnotice">
|
|
||||||
<para>
|
|
||||||
<address>Free Software Foundation, Inc. <street>59 Temple Place,
|
|
||||||
Suite 330</street>, <city>Boston</city>, <state>MA</state>
|
|
||||||
<postcode>02111-1307</postcode> <country>USA</country></address>
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies of this
|
|
||||||
license document, but changing it is not allowed.
|
|
||||||
</para>
|
|
||||||
</legalnotice>
|
|
||||||
</appendixinfo>
|
|
||||||
<title>GNU Free Documentation License</title>
|
|
||||||
|
|
||||||
<sect1 id="fdl-preamble">
|
|
||||||
<title>0. PREAMBLE</title>
|
|
||||||
<para>
|
|
||||||
The purpose of this License is to make a manual, textbook, or
|
|
||||||
other written document <quote>free</quote> in the sense of
|
|
||||||
freedom: to assure everyone the effective freedom to copy and
|
|
||||||
redistribute it, with or without modifying it, either
|
|
||||||
commercially or noncommercially. Secondarily, this License
|
|
||||||
preserves for the author and publisher a way to get credit for
|
|
||||||
their work, while not being considered responsible for
|
|
||||||
modifications made by others.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
This License is a kind of <quote>copyleft</quote>, which means
|
|
||||||
that derivative works of the document must themselves be free in
|
|
||||||
the same sense. It complements the GNU General Public License,
|
|
||||||
which is a copyleft license designed for free software.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
We have designed this License in order to use it for manuals for
|
|
||||||
free software, because free software needs free documentation: a
|
|
||||||
free program should come with manuals providing the same
|
|
||||||
freedoms that the software does. But this License is not limited
|
|
||||||
to software manuals; it can be used for any textual work,
|
|
||||||
regardless of subject matter or whether it is published as a
|
|
||||||
printed book. We recommend this License principally for works
|
|
||||||
whose purpose is instruction or reference.
|
|
||||||
</para>
|
|
||||||
</sect1>
|
|
||||||
<sect1 id="fdl-section1">
|
|
||||||
<title>1. APPLICABILITY AND DEFINITIONS</title>
|
|
||||||
<para id="fdl-document">
|
|
||||||
This License applies to any manual or other work that contains a
|
|
||||||
notice placed by the copyright holder saying it can be
|
|
||||||
distributed under the terms of this License. The
|
|
||||||
<quote>Document</quote>, below, refers to any such manual or
|
|
||||||
work. Any member of the public is a licensee, and is addressed
|
|
||||||
as <quote>you</quote>.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para id="fdl-modified">
|
|
||||||
A <quote>Modified Version</quote> of the Document means any work
|
|
||||||
containing the Document or a portion of it, either copied
|
|
||||||
verbatim, or with modifications and/or translated into another
|
|
||||||
language.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para id="fdl-secondary">
|
|
||||||
A <quote>Secondary Section</quote> is a named appendix or a
|
|
||||||
front-matter section of the <link
|
|
||||||
linkend="fdl-document">Document</link> that deals exclusively
|
|
||||||
with the relationship of the publishers or authors of the
|
|
||||||
Document to the Document's overall subject (or to related
|
|
||||||
matters) and contains nothing that could fall directly within
|
|
||||||
that overall subject. (For example, if the Document is in part a
|
|
||||||
textbook of mathematics, a Secondary Section may not explain any
|
|
||||||
mathematics.) The relationship could be a matter of historical
|
|
||||||
connection with the subject or with related matters, or of
|
|
||||||
legal, commercial, philosophical, ethical or political position
|
|
||||||
regarding them.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para id="fdl-invariant">
|
|
||||||
The <quote>Invariant Sections</quote> are certain <link
|
|
||||||
linkend="fdl-secondary"> Secondary Sections</link> whose titles
|
|
||||||
are designated, as being those of Invariant Sections, in the
|
|
||||||
notice that says that the <link
|
|
||||||
linkend="fdl-document">Document</link> is released under this
|
|
||||||
License.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para id="fdl-cover-texts">
|
|
||||||
The <quote>Cover Texts</quote> are certain short passages of
|
|
||||||
text that are listed, as Front-Cover Texts or Back-Cover Texts,
|
|
||||||
in the notice that says that the <link
|
|
||||||
linkend="fdl-document">Document</link> is released under this
|
|
||||||
License.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para id="fdl-transparent">
|
|
||||||
A <quote>Transparent</quote> copy of the <link
|
|
||||||
linkend="fdl-document"> Document</link> means a machine-readable
|
|
||||||
copy, represented in a format whose specification is available
|
|
||||||
to the general public, whose contents can be viewed and edited
|
|
||||||
directly and straightforwardly with generic text editors or (for
|
|
||||||
images composed of pixels) generic paint programs or (for
|
|
||||||
drawings) some widely available drawing editor, and that is
|
|
||||||
suitable for input to text formatters or for automatic
|
|
||||||
translation to a variety of formats suitable for input to text
|
|
||||||
formatters. A copy made in an otherwise Transparent file format
|
|
||||||
whose markup has been designed to thwart or discourage
|
|
||||||
subsequent modification by readers is not Transparent. A copy
|
|
||||||
that is not <quote>Transparent</quote> is called
|
|
||||||
<quote>Opaque</quote>.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
Examples of suitable formats for Transparent copies include
|
|
||||||
plain ASCII without markup, Texinfo input format, LaTeX input
|
|
||||||
format, SGML or XML using a publicly available DTD, and
|
|
||||||
standard-conforming simple HTML designed for human
|
|
||||||
modification. Opaque formats include PostScript, PDF,
|
|
||||||
proprietary formats that can be read and edited only by
|
|
||||||
proprietary word processors, SGML or XML for which the DTD
|
|
||||||
and/or processing tools are not generally available, and the
|
|
||||||
machine-generated HTML produced by some word processors for
|
|
||||||
output purposes only.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para id="fdl-title-page">
|
|
||||||
The <quote>Title Page</quote> means, for a printed book, the
|
|
||||||
title page itself, plus such following pages as are needed to
|
|
||||||
hold, legibly, the material this License requires to appear in
|
|
||||||
the title page. For works in formats which do not have any title
|
|
||||||
page as such, <quote>Title Page</quote> means the text near the
|
|
||||||
most prominent appearance of the work's title, preceding the
|
|
||||||
beginning of the body of the text.
|
|
||||||
</para>
|
|
||||||
</sect1>
|
|
||||||
|
|
||||||
<sect1 id="fdl-section2">
|
|
||||||
<title>2. VERBATIM COPYING</title>
|
|
||||||
<para>
|
|
||||||
You may copy and distribute the <link
|
|
||||||
linkend="fdl-document">Document</link> in any medium, either
|
|
||||||
commercially or noncommercially, provided that this License, the
|
|
||||||
copyright notices, and the license notice saying this License
|
|
||||||
applies to the Document are reproduced in all copies, and that
|
|
||||||
you add no other conditions whatsoever to those of this
|
|
||||||
License. You may not use technical measures to obstruct or
|
|
||||||
control the reading or further copying of the copies you make or
|
|
||||||
distribute. However, you may accept compensation in exchange for
|
|
||||||
copies. If you distribute a large enough number of copies you
|
|
||||||
must also follow the conditions in <link
|
|
||||||
linkend="fdl-section3">section 3</link>.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
You may also lend copies, under the same conditions stated
|
|
||||||
above, and you may publicly display copies.
|
|
||||||
</para>
|
|
||||||
</sect1>
|
|
||||||
|
|
||||||
<sect1 id="fdl-section3">
|
|
||||||
<title>3. COPYING IN QUANTITY</title>
|
|
||||||
<para>
|
|
||||||
If you publish printed copies of the <link
|
|
||||||
linkend="fdl-document">Document</link> numbering more than 100,
|
|
||||||
and the Document's license notice requires <link
|
|
||||||
linkend="fdl-cover-texts">Cover Texts</link>, you must enclose
|
|
||||||
the copies in covers that carry, clearly and legibly, all these
|
|
||||||
Cover Texts: Front-Cover Texts on the front cover, and
|
|
||||||
Back-Cover Texts on the back cover. Both covers must also
|
|
||||||
clearly and legibly identify you as the publisher of these
|
|
||||||
copies. The front cover must present the full title with all
|
|
||||||
words of the title equally prominent and visible. You may add
|
|
||||||
other material on the covers in addition. Copying with changes
|
|
||||||
limited to the covers, as long as they preserve the title of the
|
|
||||||
<link linkend="fdl-document">Document</link> and satisfy these
|
|
||||||
conditions, can be treated as verbatim copying in other
|
|
||||||
respects.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
If the required texts for either cover are too voluminous to fit
|
|
||||||
legibly, you should put the first ones listed (as many as fit
|
|
||||||
reasonably) on the actual cover, and continue the rest onto
|
|
||||||
adjacent pages.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
If you publish or distribute <link
|
|
||||||
linkend="fdl-transparent">Opaque</link> copies of the <link
|
|
||||||
linkend="fdl-document">Document</link> numbering more than 100,
|
|
||||||
you must either include a machine-readable <link
|
|
||||||
linkend="fdl-transparent">Transparent</link> copy along with
|
|
||||||
each Opaque copy, or state in or with each Opaque copy a
|
|
||||||
publicly-accessible computer-network location containing a
|
|
||||||
complete Transparent copy of the Document, free of added
|
|
||||||
material, which the general network-using public has access to
|
|
||||||
download anonymously at no charge using public-standard network
|
|
||||||
protocols. If you use the latter option, you must take
|
|
||||||
reasonably prudent steps, when you begin distribution of Opaque
|
|
||||||
copies in quantity, to ensure that this Transparent copy will
|
|
||||||
remain thus accessible at the stated location until at least one
|
|
||||||
year after the last time you distribute an Opaque copy (directly
|
|
||||||
or through your agents or retailers) of that edition to the
|
|
||||||
public.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
It is requested, but not required, that you contact the authors
|
|
||||||
of the <link linkend="fdl-document">Document</link> well before
|
|
||||||
redistributing any large number of copies, to give them a chance
|
|
||||||
to provide you with an updated version of the Document.
|
|
||||||
</para>
|
|
||||||
</sect1>
|
|
||||||
|
|
||||||
<sect1 id="fdl-section4">
|
|
||||||
<title>4. MODIFICATIONS</title>
|
|
||||||
<para>
|
|
||||||
You may copy and distribute a <link
|
|
||||||
linkend="fdl-modified">Modified Version</link> of the <link
|
|
||||||
linkend="fdl-document">Document</link> under the conditions of
|
|
||||||
sections <link linkend="fdl-section2">2</link> and <link
|
|
||||||
linkend="fdl-section3">3</link> above, provided that you release
|
|
||||||
the Modified Version under precisely this License, with the
|
|
||||||
Modified Version filling the role of the Document, thus
|
|
||||||
licensing distribution and modification of the Modified Version
|
|
||||||
to whoever possesses a copy of it. In addition, you must do
|
|
||||||
these things in the Modified Version:
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<itemizedlist mark="opencircle">
|
|
||||||
<listitem>
|
|
||||||
<formalpara>
|
|
||||||
<title>A</title>
|
|
||||||
<para>
|
|
||||||
Use in the <link linkend="fdl-title-page">Title
|
|
||||||
Page</link> (and on the covers, if any) a title distinct
|
|
||||||
from that of the <link
|
|
||||||
linkend="fdl-document">Document</link>, and from those of
|
|
||||||
previous versions (which should, if there were any, be
|
|
||||||
listed in the History section of the Document). You may
|
|
||||||
use the same title as a previous version if the original
|
|
||||||
publisher of that version gives permission.
|
|
||||||
</para>
|
|
||||||
</formalpara>
|
|
||||||
</listitem>
|
|
||||||
|
|
||||||
<listitem>
|
|
||||||
<formalpara>
|
|
||||||
<title>B</title>
|
|
||||||
<para>
|
|
||||||
List on the <link linkend="fdl-title-page">Title
|
|
||||||
Page</link>, as authors, one or more persons or entities
|
|
||||||
responsible for authorship of the modifications in the
|
|
||||||
<link linkend="fdl-modified">Modified Version</link>,
|
|
||||||
together with at least five of the principal authors of
|
|
||||||
the <link linkend="fdl-document">Document</link> (all of
|
|
||||||
its principal authors, if it has less than five).
|
|
||||||
</para>
|
|
||||||
</formalpara>
|
|
||||||
</listitem>
|
|
||||||
|
|
||||||
<listitem>
|
|
||||||
<formalpara>
|
|
||||||
<title>C</title>
|
|
||||||
<para>
|
|
||||||
State on the <link linkend="fdl-title-page">Title
|
|
||||||
Page</link> the name of the publisher of the <link
|
|
||||||
linkend="fdl-modified">Modified Version</link>, as the
|
|
||||||
publisher.
|
|
||||||
</para>
|
|
||||||
</formalpara>
|
|
||||||
</listitem>
|
|
||||||
|
|
||||||
<listitem>
|
|
||||||
<formalpara>
|
|
||||||
<title>D</title>
|
|
||||||
<para>
|
|
||||||
Preserve all the copyright notices of the <link
|
|
||||||
linkend="fdl-document">Document</link>.
|
|
||||||
</para>
|
|
||||||
</formalpara>
|
|
||||||
</listitem>
|
|
||||||
|
|
||||||
<listitem>
|
|
||||||
<formalpara>
|
|
||||||
<title>E</title>
|
|
||||||
<para>
|
|
||||||
Add an appropriate copyright notice for your modifications
|
|
||||||
adjacent to the other copyright notices.
|
|
||||||
</para>
|
|
||||||
</formalpara>
|
|
||||||
</listitem>
|
|
||||||
|
|
||||||
<listitem>
|
|
||||||
<formalpara>
|
|
||||||
<title>F</title>
|
|
||||||
<para>
|
|
||||||
Include, immediately after the copyright notices, a
|
|
||||||
license notice giving the public permission to use the
|
|
||||||
<link linkend="fdl-modified">Modified Version</link> under
|
|
||||||
the terms of this License, in the form shown in the
|
|
||||||
Addendum below.
|
|
||||||
</para>
|
|
||||||
</formalpara>
|
|
||||||
</listitem>
|
|
||||||
|
|
||||||
<listitem>
|
|
||||||
<formalpara>
|
|
||||||
<title>G</title>
|
|
||||||
<para>
|
|
||||||
Preserve in that license notice the full lists of <link
|
|
||||||
linkend="fdl-invariant"> Invariant Sections</link> and
|
|
||||||
required <link linkend="fdl-cover-texts">Cover
|
|
||||||
Texts</link> given in the <link
|
|
||||||
linkend="fdl-document">Document's</link> license notice.
|
|
||||||
</para>
|
|
||||||
</formalpara>
|
|
||||||
</listitem>
|
|
||||||
|
|
||||||
<listitem>
|
|
||||||
<formalpara>
|
|
||||||
<title>H</title>
|
|
||||||
<para>
|
|
||||||
Include an unaltered copy of this License.
|
|
||||||
</para>
|
|
||||||
</formalpara>
|
|
||||||
</listitem>
|
|
||||||
|
|
||||||
<listitem>
|
|
||||||
<formalpara>
|
|
||||||
<title>I</title>
|
|
||||||
<para>
|
|
||||||
Preserve the section entitled <quote>History</quote>, and
|
|
||||||
its title, and add to it an item stating at least the
|
|
||||||
title, year, new authors, and publisher of the <link
|
|
||||||
linkend="fdl-modified">Modified Version </link>as given on
|
|
||||||
the <link linkend="fdl-title-page">Title Page</link>. If
|
|
||||||
there is no section entitled <quote>History</quote> in the
|
|
||||||
<link linkend="fdl-document">Document</link>, create one
|
|
||||||
stating the title, year, authors, and publisher of the
|
|
||||||
Document as given on its Title Page, then add an item
|
|
||||||
describing the Modified Version as stated in the previous
|
|
||||||
sentence.
|
|
||||||
</para>
|
|
||||||
</formalpara>
|
|
||||||
</listitem>
|
|
||||||
|
|
||||||
<listitem>
|
|
||||||
<formalpara>
|
|
||||||
<title>J</title>
|
|
||||||
<para>
|
|
||||||
Preserve the network location, if any, given in the <link
|
|
||||||
linkend="fdl-document">Document</link> for public access
|
|
||||||
to a <link linkend="fdl-transparent">Transparent</link>
|
|
||||||
copy of the Document, and likewise the network locations
|
|
||||||
given in the Document for previous versions it was based
|
|
||||||
on. These may be placed in the <quote>History</quote>
|
|
||||||
section. You may omit a network location for a work that
|
|
||||||
was published at least four years before the Document
|
|
||||||
itself, or if the original publisher of the version it
|
|
||||||
refers to gives permission.
|
|
||||||
</para>
|
|
||||||
</formalpara>
|
|
||||||
</listitem>
|
|
||||||
|
|
||||||
<listitem>
|
|
||||||
<formalpara>
|
|
||||||
<title>K</title>
|
|
||||||
<para>
|
|
||||||
In any section entitled <quote>Acknowledgements</quote> or
|
|
||||||
<quote>Dedications</quote>, preserve the section's title,
|
|
||||||
and preserve in the section all the substance and tone of
|
|
||||||
each of the contributor acknowledgements and/or
|
|
||||||
dedications given therein.
|
|
||||||
</para>
|
|
||||||
</formalpara>
|
|
||||||
</listitem>
|
|
||||||
|
|
||||||
<listitem>
|
|
||||||
<formalpara>
|
|
||||||
<title>L</title>
|
|
||||||
<para>
|
|
||||||
Preserve all the <link linkend="fdl-invariant">Invariant
|
|
||||||
Sections</link> of the <link
|
|
||||||
linkend="fdl-document">Document</link>, unaltered in their
|
|
||||||
text and in their titles. Section numbers or the
|
|
||||||
equivalent are not considered part of the section titles.
|
|
||||||
</para>
|
|
||||||
</formalpara>
|
|
||||||
</listitem>
|
|
||||||
|
|
||||||
<listitem>
|
|
||||||
<formalpara>
|
|
||||||
<title>M</title>
|
|
||||||
<para>
|
|
||||||
Delete any section entitled
|
|
||||||
<quote>Endorsements</quote>. Such a section may not be
|
|
||||||
included in the <link linkend="fdl-modified">Modified
|
|
||||||
Version</link>.
|
|
||||||
</para>
|
|
||||||
</formalpara>
|
|
||||||
</listitem>
|
|
||||||
|
|
||||||
<listitem>
|
|
||||||
<formalpara>
|
|
||||||
<title>N</title>
|
|
||||||
<para>
|
|
||||||
Do not retitle any existing section as
|
|
||||||
<quote>Endorsements</quote> or to conflict in title with
|
|
||||||
any <link linkend="fdl-invariant">Invariant
|
|
||||||
Section</link>.
|
|
||||||
</para>
|
|
||||||
</formalpara>
|
|
||||||
</listitem>
|
|
||||||
</itemizedlist>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
If the <link linkend="fdl-modified">Modified Version</link>
|
|
||||||
includes new front-matter sections or appendices that qualify as
|
|
||||||
<link linkend="fdl-secondary">Secondary Sections</link> and
|
|
||||||
contain no material copied from the Document, you may at your
|
|
||||||
option designate some or all of these sections as invariant. To
|
|
||||||
do this, add their titles to the list of <link
|
|
||||||
linkend="fdl-invariant">Invariant Sections</link> in the
|
|
||||||
Modified Version's license notice. These titles must be
|
|
||||||
distinct from any other section titles.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
You may add a section entitled <quote>Endorsements</quote>,
|
|
||||||
provided it contains nothing but endorsements of your <link
|
|
||||||
linkend="fdl-modified">Modified Version</link> by various
|
|
||||||
parties--for example, statements of peer review or that the text
|
|
||||||
has been approved by an organization as the authoritative
|
|
||||||
definition of a standard.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
You may add a passage of up to five words as a <link
|
|
||||||
linkend="fdl-cover-texts">Front-Cover Text</link>, and a passage
|
|
||||||
of up to 25 words as a <link
|
|
||||||
linkend="fdl-cover-texts">Back-Cover Text</link>, to the end of
|
|
||||||
the list of <link linkend="fdl-cover-texts">Cover Texts</link>
|
|
||||||
in the <link linkend="fdl-modified">Modified Version</link>.
|
|
||||||
Only one passage of Front-Cover Text and one of Back-Cover Text
|
|
||||||
may be added by (or through arrangements made by) any one
|
|
||||||
entity. If the <link linkend="fdl-document">Document</link>
|
|
||||||
already includes a cover text for the same cover, previously
|
|
||||||
added by you or by arrangement made by the same entity you are
|
|
||||||
acting on behalf of, you may not add another; but you may
|
|
||||||
replace the old one, on explicit permission from the previous
|
|
||||||
publisher that added the old one.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
The author(s) and publisher(s) of the <link
|
|
||||||
linkend="fdl-document">Document</link> do not by this License
|
|
||||||
give permission to use their names for publicity for or to
|
|
||||||
assert or imply endorsement of any <link
|
|
||||||
linkend="fdl-modified">Modified Version </link>.
|
|
||||||
</para>
|
|
||||||
</sect1>
|
|
||||||
|
|
||||||
<sect1 id="fdl-section5">
|
|
||||||
<title>5. COMBINING DOCUMENTS</title>
|
|
||||||
<para>
|
|
||||||
You may combine the <link linkend="fdl-document">Document</link>
|
|
||||||
with other documents released under this License, under the
|
|
||||||
terms defined in <link linkend="fdl-section4">section 4</link>
|
|
||||||
above for modified versions, provided that you include in the
|
|
||||||
combination all of the <link linkend="fdl-invariant">Invariant
|
|
||||||
Sections</link> of all of the original documents, unmodified,
|
|
||||||
and list them all as Invariant Sections of your combined work in
|
|
||||||
its license notice.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
The combined work need only contain one copy of this License,
|
|
||||||
and multiple identical <link linkend="fdl-invariant">Invariant
|
|
||||||
Sections</link> may be replaced with a single copy. If there are
|
|
||||||
multiple Invariant Sections with the same name but different
|
|
||||||
contents, make the title of each such section unique by adding
|
|
||||||
at the end of it, in parentheses, the name of the original
|
|
||||||
author or publisher of that section if known, or else a unique
|
|
||||||
number. Make the same adjustment to the section titles in the
|
|
||||||
list of Invariant Sections in the license notice of the combined
|
|
||||||
work.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
In the combination, you must combine any sections entitled
|
|
||||||
<quote>History</quote> in the various original documents,
|
|
||||||
forming one section entitled <quote>History</quote>; likewise
|
|
||||||
combine any sections entitled <quote>Acknowledgements</quote>,
|
|
||||||
and any sections entitled <quote>Dedications</quote>. You must
|
|
||||||
delete all sections entitled <quote>Endorsements.</quote>
|
|
||||||
</para>
|
|
||||||
</sect1>
|
|
||||||
|
|
||||||
<sect1 id="fdl-section6">
|
|
||||||
<title>6. COLLECTIONS OF DOCUMENTS</title>
|
|
||||||
<para>
|
|
||||||
You may make a collection consisting of the <link
|
|
||||||
linkend="fdl-document">Document</link> and other documents
|
|
||||||
released under this License, and replace the individual copies
|
|
||||||
of this License in the various documents with a single copy that
|
|
||||||
is included in the collection, provided that you follow the
|
|
||||||
rules of this License for verbatim copying of each of the
|
|
||||||
documents in all other respects.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
You may extract a single document from such a collection, and
|
|
||||||
dispbibute it individually under this License, provided you
|
|
||||||
insert a copy of this License into the extracted document, and
|
|
||||||
follow this License in all other respects regarding verbatim
|
|
||||||
copying of that document.
|
|
||||||
</para>
|
|
||||||
</sect1>
|
|
||||||
|
|
||||||
<sect1 id="fdl-section7">
|
|
||||||
<title>7. AGGREGATION WITH INDEPENDENT WORKS</title>
|
|
||||||
<para>
|
|
||||||
A compilation of the <link
|
|
||||||
linkend="fdl-document">Document</link> or its derivatives with
|
|
||||||
other separate and independent documents or works, in or on a
|
|
||||||
volume of a storage or distribution medium, does not as a whole
|
|
||||||
count as a <link linkend="fdl-modified">Modified Version</link>
|
|
||||||
of the Document, provided no compilation copyright is claimed
|
|
||||||
for the compilation. Such a compilation is called an
|
|
||||||
<quote>aggregate</quote>, and this License does not apply to the
|
|
||||||
other self-contained works thus compiled with the Document , on
|
|
||||||
account of their being thus compiled, if they are not themselves
|
|
||||||
derivative works of the Document. If the <link
|
|
||||||
linkend="fdl-cover-texts">Cover Text</link> requirement of <link
|
|
||||||
linkend="fdl-section3">section 3</link> is applicable to these
|
|
||||||
copies of the Document, then if the Document is less than one
|
|
||||||
quarter of the entire aggregate, the Document's Cover Texts may
|
|
||||||
be placed on covers that surround only the Document within the
|
|
||||||
aggregate. Otherwise they must appear on covers around the whole
|
|
||||||
aggregate.
|
|
||||||
</para>
|
|
||||||
</sect1>
|
|
||||||
|
|
||||||
<sect1 id="fdl-section8">
|
|
||||||
<title>8. TRANSLATION</title>
|
|
||||||
<para>
|
|
||||||
Translation is considered a kind of modification, so you may
|
|
||||||
distribute translations of the <link
|
|
||||||
linkend="fdl-document">Document</link> under the terms of <link
|
|
||||||
linkend="fdl-section4">section 4</link>. Replacing <link
|
|
||||||
linkend="fdl-invariant"> Invariant Sections</link> with
|
|
||||||
translations requires special permission from their copyright
|
|
||||||
holders, but you may include translations of some or all
|
|
||||||
Invariant Sections in addition to the original versions of these
|
|
||||||
Invariant Sections. You may include a translation of this
|
|
||||||
License provided that you also include the original English
|
|
||||||
version of this License. In case of a disagreement between the
|
|
||||||
translation and the original English version of this License,
|
|
||||||
the original English version will prevail.
|
|
||||||
</para>
|
|
||||||
</sect1>
|
|
||||||
|
|
||||||
<sect1 id="fdl-section9">
|
|
||||||
<title>9. TERMINATION</title>
|
|
||||||
<para>
|
|
||||||
You may not copy, modify, sublicense, or distribute the <link
|
|
||||||
linkend="fdl-document">Document</link> except as expressly
|
|
||||||
provided for under this License. Any other attempt to copy,
|
|
||||||
modify, sublicense or distribute the Document is void, and will
|
|
||||||
automatically terminate your rights under this License. However,
|
|
||||||
parties who have received copies, or rights, from you under this
|
|
||||||
License will not have their licenses terminated so long as such
|
|
||||||
parties remain in full compliance.
|
|
||||||
</para>
|
|
||||||
</sect1>
|
|
||||||
|
|
||||||
<sect1 id="fdl-section10">
|
|
||||||
<title>10. FUTURE REVISIONS OF THIS LICENSE</title>
|
|
||||||
<para>
|
|
||||||
The <ulink type="http"
|
|
||||||
url="http://www.gnu.org/fsf/fsf.html">Free Software
|
|
||||||
Foundation</ulink> may publish new, revised versions of the GNU
|
|
||||||
Free Documentation License from time to time. Such new versions
|
|
||||||
will be similar in spirit to the present version, but may differ
|
|
||||||
in detail to address new problems or concerns. See <ulink
|
|
||||||
type="http"
|
|
||||||
url="http://www.gnu.org/copyleft">http://www.gnu.org/copyleft/</ulink>.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
Each version of the License is given a distinguishing version
|
|
||||||
number. If the <link linkend="fdl-document">Document</link>
|
|
||||||
specifies that a particular numbered version of this License
|
|
||||||
<quote>or any later version</quote> applies to it, you have the
|
|
||||||
option of following the terms and conditions either of that
|
|
||||||
specified version or of any later version that has been
|
|
||||||
published (not as a draft) by the Free Software Foundation. If
|
|
||||||
the Document does not specify a version number of this License,
|
|
||||||
you may choose any version ever published (not as a draft) by
|
|
||||||
the Free Software Foundation.
|
|
||||||
</para>
|
|
||||||
</sect1>
|
|
||||||
|
|
||||||
<sect1 id="fdl-using">
|
|
||||||
<title>Addendum</title>
|
|
||||||
<para>
|
|
||||||
To use this License in a document you have written, include a copy of
|
|
||||||
the License in the document and put the following copyright and
|
|
||||||
license notices just after the title page:
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<blockquote>
|
|
||||||
<para>
|
|
||||||
Copyright © YEAR YOUR NAME.
|
|
||||||
</para>
|
|
||||||
<para>
|
|
||||||
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 the <link
|
|
||||||
linkend="fdl-invariant">Invariant Sections</link> being LIST
|
|
||||||
THEIR TITLES, with the <link
|
|
||||||
linkend="fdl-cover-texts">Front-Cover Texts</link> being LIST,
|
|
||||||
and with the <link linkend="fdl-cover-texts">Back-Cover
|
|
||||||
Texts</link> being LIST. A copy of the license is included in
|
|
||||||
the section entitled <quote>GNU Free Documentation
|
|
||||||
License</quote>.
|
|
||||||
</para>
|
|
||||||
</blockquote>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
If you have no <link linkend="fdl-invariant">Invariant
|
|
||||||
Sections</link>, write <quote>with no Invariant Sections</quote>
|
|
||||||
instead of saying which ones are invariant. If you have no
|
|
||||||
<link linkend="fdl-cover-texts">Front-Cover Texts</link>, write
|
|
||||||
<quote>no Front-Cover Texts</quote> instead of
|
|
||||||
<quote>Front-Cover Texts being LIST</quote>; likewise for <link
|
|
||||||
linkend="fdl-cover-texts">Back-Cover Texts</link>.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
If your document contains nontrivial examples of program code,
|
|
||||||
we recommend releasing these examples in parallel under your
|
|
||||||
choice of free software license, such as the <ulink type="http"
|
|
||||||
url="http://www.gnu.org/copyleft/gpl.html"> GNU General Public
|
|
||||||
License</ulink>, to permit their use in free software.
|
|
||||||
</para>
|
|
||||||
</sect1>
|
|
||||||
</appendix>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
<refentry id="func-close">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>V4L2 close()</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>v4l2-close</refname>
|
|
||||||
<refpurpose>Close a V4L2 device</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcsynopsisinfo>#include <unistd.h></funcsynopsisinfo>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>close</function></funcdef>
|
|
||||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>fd</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>&fd;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
|
|
||||||
<para>Closes the device. Any I/O in progress is terminated and
|
|
||||||
resources associated with the file descriptor are freed. However data
|
|
||||||
format parameters, current input or output, control values or other
|
|
||||||
properties remain unchanged.</para>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Return Value</title>
|
|
||||||
|
|
||||||
<para>The function returns <returnvalue>0</returnvalue> on
|
|
||||||
success, <returnvalue>-1</returnvalue> on failure and the
|
|
||||||
<varname>errno</varname> is set appropriately. Possible error
|
|
||||||
codes:</para>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EBADF</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para><parameter>fd</parameter> is not a valid open file
|
|
||||||
descriptor.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
<refentry id="func-ioctl">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>V4L2 ioctl()</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>v4l2-ioctl</refname>
|
|
||||||
<refpurpose>Program a V4L2 device</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcsynopsisinfo>#include <sys/ioctl.h></funcsynopsisinfo>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>ioctl</function></funcdef>
|
|
||||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>request</parameter></paramdef>
|
|
||||||
<paramdef>void *<parameter>argp</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>fd</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>&fd;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>request</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>V4L2 ioctl request code as defined in the <filename>videodev2.h</filename> header file, for example
|
|
||||||
VIDIOC_QUERYCAP.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>argp</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Pointer to a function parameter, usually a structure.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
|
|
||||||
<para>The <function>ioctl()</function> function is used to program
|
|
||||||
V4L2 devices. The argument <parameter>fd</parameter> must be an open
|
|
||||||
file descriptor. An ioctl <parameter>request</parameter> has encoded
|
|
||||||
in it whether the argument is an input, output or read/write
|
|
||||||
parameter, and the size of the argument <parameter>argp</parameter> in
|
|
||||||
bytes. Macros and defines specifying V4L2 ioctl requests are located
|
|
||||||
in the <filename>videodev2.h</filename> header file.
|
|
||||||
Applications should use their own copy, not include the version in the
|
|
||||||
kernel sources on the system they compile on. All V4L2 ioctl requests,
|
|
||||||
their respective function and parameters are specified in <xref
|
|
||||||
linkend="user-func" />.</para>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
&return-value;
|
|
||||||
<para>When an ioctl that takes an output or read/write parameter fails,
|
|
||||||
the parameter remains unmodified.</para>
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
@@ -1,183 +0,0 @@
|
|||||||
<refentry id="func-mmap">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>V4L2 mmap()</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>v4l2-mmap</refname>
|
|
||||||
<refpurpose>Map device memory into application address space</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcsynopsisinfo>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <sys/mman.h></funcsynopsisinfo>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>void *<function>mmap</function></funcdef>
|
|
||||||
<paramdef>void *<parameter>start</parameter></paramdef>
|
|
||||||
<paramdef>size_t <parameter>length</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>prot</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>flags</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
|
||||||
<paramdef>off_t <parameter>offset</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>start</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Map the buffer to this address in the
|
|
||||||
application's address space. When the <constant>MAP_FIXED</constant>
|
|
||||||
flag is specified, <parameter>start</parameter> must be a multiple of the
|
|
||||||
pagesize and mmap will fail when the specified address
|
|
||||||
cannot be used. Use of this option is discouraged; applications should
|
|
||||||
just specify a <constant>NULL</constant> pointer here.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>length</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Length of the memory area to map. This must be the
|
|
||||||
same value as returned by the driver in the &v4l2-buffer;
|
|
||||||
<structfield>length</structfield> field for the
|
|
||||||
single-planar API, and the same value as returned by the driver
|
|
||||||
in the &v4l2-plane; <structfield>length</structfield> field for the
|
|
||||||
multi-planar API.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>prot</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The <parameter>prot</parameter> argument describes the
|
|
||||||
desired memory protection. Regardless of the device type and the
|
|
||||||
direction of data exchange it should be set to
|
|
||||||
<constant>PROT_READ</constant> | <constant>PROT_WRITE</constant>,
|
|
||||||
permitting read and write access to image buffers. Drivers should
|
|
||||||
support at least this combination of flags. Note the Linux
|
|
||||||
<filename>video-buf</filename> kernel module, which is used by the
|
|
||||||
bttv, saa7134, saa7146, cx88 and vivi driver supports only
|
|
||||||
<constant>PROT_READ</constant> | <constant>PROT_WRITE</constant>. When
|
|
||||||
the driver does not support the desired protection the
|
|
||||||
<function>mmap()</function> function fails.</para>
|
|
||||||
<para>Note device memory accesses (⪚ the memory on a
|
|
||||||
graphics card with video capturing hardware) may incur a performance
|
|
||||||
penalty compared to main memory accesses, or reads may be
|
|
||||||
significantly slower than writes or vice versa. Other I/O methods may
|
|
||||||
be more efficient in this case.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>flags</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The <parameter>flags</parameter> parameter
|
|
||||||
specifies the type of the mapped object, mapping options and whether
|
|
||||||
modifications made to the mapped copy of the page are private to the
|
|
||||||
process or are to be shared with other references.</para>
|
|
||||||
<para><constant>MAP_FIXED</constant> requests that the
|
|
||||||
driver selects no other address than the one specified. If the
|
|
||||||
specified address cannot be used, <function>mmap()</function> will fail. If
|
|
||||||
<constant>MAP_FIXED</constant> is specified,
|
|
||||||
<parameter>start</parameter> must be a multiple of the pagesize. Use
|
|
||||||
of this option is discouraged.</para>
|
|
||||||
<para>One of the <constant>MAP_SHARED</constant> or
|
|
||||||
<constant>MAP_PRIVATE</constant> flags must be set.
|
|
||||||
<constant>MAP_SHARED</constant> allows applications to share the
|
|
||||||
mapped memory with other (⪚ child-) processes. Note the Linux
|
|
||||||
<filename>video-buf</filename> module which is used by the bttv,
|
|
||||||
saa7134, saa7146, cx88 and vivi driver supports only
|
|
||||||
<constant>MAP_SHARED</constant>. <constant>MAP_PRIVATE</constant>
|
|
||||||
requests copy-on-write semantics. V4L2 applications should not set the
|
|
||||||
<constant>MAP_PRIVATE</constant>, <constant>MAP_DENYWRITE</constant>,
|
|
||||||
<constant>MAP_EXECUTABLE</constant> or <constant>MAP_ANON</constant>
|
|
||||||
flag.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>fd</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>&fd;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>offset</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Offset of the buffer in device memory. This must be the
|
|
||||||
same value as returned by the driver in the &v4l2-buffer;
|
|
||||||
<structfield>m</structfield> union <structfield>offset</structfield> field for
|
|
||||||
the single-planar API, and the same value as returned by the driver
|
|
||||||
in the &v4l2-plane; <structfield>m</structfield> union
|
|
||||||
<structfield>mem_offset</structfield> field for the multi-planar API.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
|
|
||||||
<para>The <function>mmap()</function> function asks to map
|
|
||||||
<parameter>length</parameter> bytes starting at
|
|
||||||
<parameter>offset</parameter> in the memory of the device specified by
|
|
||||||
<parameter>fd</parameter> into the application address space,
|
|
||||||
preferably at address <parameter>start</parameter>. This latter
|
|
||||||
address is a hint only, and is usually specified as 0.</para>
|
|
||||||
|
|
||||||
<para>Suitable length and offset parameters are queried with the
|
|
||||||
&VIDIOC-QUERYBUF; ioctl. Buffers must be allocated with the
|
|
||||||
&VIDIOC-REQBUFS; ioctl before they can be queried.</para>
|
|
||||||
|
|
||||||
<para>To unmap buffers the &func-munmap; function is used.</para>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Return Value</title>
|
|
||||||
|
|
||||||
<para>On success <function>mmap()</function> returns a pointer to
|
|
||||||
the mapped buffer. On error <constant>MAP_FAILED</constant> (-1) is
|
|
||||||
returned, and the <varname>errno</varname> variable is set
|
|
||||||
appropriately. Possible error codes are:</para>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EBADF</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para><parameter>fd</parameter> is not a valid file
|
|
||||||
descriptor.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EACCES</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para><parameter>fd</parameter> is
|
|
||||||
not open for reading and writing.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EINVAL</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The <parameter>start</parameter> or
|
|
||||||
<parameter>length</parameter> or <parameter>offset</parameter> are not
|
|
||||||
suitable. (E. g. they are too large, or not aligned on a
|
|
||||||
<constant>PAGESIZE</constant> boundary.)</para>
|
|
||||||
<para>The <parameter>flags</parameter> or
|
|
||||||
<parameter>prot</parameter> value is not supported.</para>
|
|
||||||
<para>No buffers have been allocated with the
|
|
||||||
&VIDIOC-REQBUFS; ioctl.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>ENOMEM</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Not enough physical or virtual memory was available to
|
|
||||||
complete the request.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
<refentry id="func-munmap">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>V4L2 munmap()</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>v4l2-munmap</refname>
|
|
||||||
<refpurpose>Unmap device memory</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcsynopsisinfo>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <sys/mman.h></funcsynopsisinfo>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>munmap</function></funcdef>
|
|
||||||
<paramdef>void *<parameter>start</parameter></paramdef>
|
|
||||||
<paramdef>size_t <parameter>length</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>start</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Address of the mapped buffer as returned by the
|
|
||||||
&func-mmap; function.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>length</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Length of the mapped buffer. This must be the same
|
|
||||||
value as given to <function>mmap()</function> and returned by the
|
|
||||||
driver in the &v4l2-buffer; <structfield>length</structfield>
|
|
||||||
field for the single-planar API and in the &v4l2-plane;
|
|
||||||
<structfield>length</structfield> field for the multi-planar API.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
|
|
||||||
<para>Unmaps a previously with the &func-mmap; function mapped
|
|
||||||
buffer and frees it, if possible. <!-- ? This function (not freeing)
|
|
||||||
has no impact on I/O in progress, specifically it does not imply
|
|
||||||
&VIDIOC-STREAMOFF; to terminate I/O. Unmapped buffers can still be
|
|
||||||
enqueued, dequeued or queried, they are just not accessible by the
|
|
||||||
application.--></para>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Return Value</title>
|
|
||||||
|
|
||||||
<para>On success <function>munmap()</function> returns 0, on
|
|
||||||
failure -1 and the <varname>errno</varname> variable is set
|
|
||||||
appropriately:</para>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EINVAL</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The <parameter>start</parameter> or
|
|
||||||
<parameter>length</parameter> is incorrect, or no buffers have been
|
|
||||||
mapped yet.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
@@ -1,113 +0,0 @@
|
|||||||
<refentry id="func-open">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>V4L2 open()</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>v4l2-open</refname>
|
|
||||||
<refpurpose>Open a V4L2 device</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcsynopsisinfo>#include <fcntl.h></funcsynopsisinfo>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>open</function></funcdef>
|
|
||||||
<paramdef>const char *<parameter>device_name</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>flags</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>device_name</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Device to be opened.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>flags</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Open flags. Access mode must be
|
|
||||||
<constant>O_RDWR</constant>. This is just a technicality, input devices
|
|
||||||
still support only reading and output devices only writing.</para>
|
|
||||||
<para>When the <constant>O_NONBLOCK</constant> flag is
|
|
||||||
given, the read() function and the &VIDIOC-DQBUF; ioctl will return
|
|
||||||
the &EAGAIN; when no data is available or no buffer is in the driver
|
|
||||||
outgoing queue, otherwise these functions block until data becomes
|
|
||||||
available. All V4L2 drivers exchanging data with applications must
|
|
||||||
support the <constant>O_NONBLOCK</constant> flag.</para>
|
|
||||||
<para>Other flags have no effect.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
|
|
||||||
<para>To open a V4L2 device applications call
|
|
||||||
<function>open()</function> with the desired device name. This
|
|
||||||
function has no side effects; all data format parameters, current
|
|
||||||
input or output, control values or other properties remain unchanged.
|
|
||||||
At the first <function>open()</function> call after loading the driver
|
|
||||||
they will be reset to default values, drivers are never in an
|
|
||||||
undefined state.</para>
|
|
||||||
</refsect1>
|
|
||||||
<refsect1>
|
|
||||||
<title>Return Value</title>
|
|
||||||
|
|
||||||
<para>On success <function>open</function> returns the new file
|
|
||||||
descriptor. On error -1 is returned, and the <varname>errno</varname>
|
|
||||||
variable is set appropriately. Possible error codes are:</para>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EACCES</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The caller has no permission to access the
|
|
||||||
device.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EBUSY</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The driver does not support multiple opens and the
|
|
||||||
device is already in use.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>ENXIO</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>No device corresponding to this device special file
|
|
||||||
exists.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>ENOMEM</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Not enough kernel memory was available to complete the
|
|
||||||
request.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EMFILE</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The process already has the maximum number of
|
|
||||||
files open.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>ENFILE</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The limit on the total number of files open on the
|
|
||||||
system has been reached.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
@@ -1,142 +0,0 @@
|
|||||||
<refentry id="func-poll">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>V4L2 poll()</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>v4l2-poll</refname>
|
|
||||||
<refpurpose>Wait for some event on a file descriptor</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcsynopsisinfo>#include <sys/poll.h></funcsynopsisinfo>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>poll</function></funcdef>
|
|
||||||
<paramdef>struct pollfd *<parameter>ufds</parameter></paramdef>
|
|
||||||
<paramdef>unsigned int <parameter>nfds</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>timeout</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
|
|
||||||
<para>With the <function>poll()</function> function applications
|
|
||||||
can suspend execution until the driver has captured data or is ready
|
|
||||||
to accept data for output.</para>
|
|
||||||
|
|
||||||
<para>When streaming I/O has been negotiated this function waits
|
|
||||||
until a buffer has been filled by the capture device and can be dequeued
|
|
||||||
with the &VIDIOC-DQBUF; ioctl. For output devices this function waits
|
|
||||||
until the device is ready to accept a new buffer to be queued up with
|
|
||||||
the &VIDIOC-QBUF; ioctl for display. When buffers are already in the outgoing
|
|
||||||
queue of the driver (capture) or the incoming queue isn't full (display)
|
|
||||||
the function returns immediately.</para>
|
|
||||||
|
|
||||||
<para>On success <function>poll()</function> returns the number of
|
|
||||||
file descriptors that have been selected (that is, file descriptors
|
|
||||||
for which the <structfield>revents</structfield> field of the
|
|
||||||
respective <structname>pollfd</structname> structure is non-zero).
|
|
||||||
Capture devices set the <constant>POLLIN</constant> and
|
|
||||||
<constant>POLLRDNORM</constant> flags in the
|
|
||||||
<structfield>revents</structfield> field, output devices the
|
|
||||||
<constant>POLLOUT</constant> and <constant>POLLWRNORM</constant>
|
|
||||||
flags. When the function timed out it returns a value of zero, on
|
|
||||||
failure it returns <returnvalue>-1</returnvalue> and the
|
|
||||||
<varname>errno</varname> variable is set appropriately. When the
|
|
||||||
application did not call &VIDIOC-STREAMON; the
|
|
||||||
<function>poll()</function> function succeeds, but sets the
|
|
||||||
<constant>POLLERR</constant> flag in the
|
|
||||||
<structfield>revents</structfield> field. When the
|
|
||||||
application has called &VIDIOC-STREAMON; for a capture device but hasn't
|
|
||||||
yet called &VIDIOC-QBUF;, the <function>poll()</function> function
|
|
||||||
succeeds and sets the <constant>POLLERR</constant> flag in the
|
|
||||||
<structfield>revents</structfield> field. For output devices this
|
|
||||||
same situation will cause <function>poll()</function> to succeed
|
|
||||||
as well, but it sets the <constant>POLLOUT</constant> and
|
|
||||||
<constant>POLLWRNORM</constant> flags in the <structfield>revents</structfield>
|
|
||||||
field.</para>
|
|
||||||
|
|
||||||
<para>If an event occurred (see &VIDIOC-DQEVENT;) then
|
|
||||||
<constant>POLLPRI</constant> will be set in the <structfield>revents</structfield>
|
|
||||||
field and <function>poll()</function> will return.</para>
|
|
||||||
|
|
||||||
<para>When use of the <function>read()</function> function has
|
|
||||||
been negotiated and the driver does not capture yet, the
|
|
||||||
<function>poll</function> function starts capturing. When that fails
|
|
||||||
it returns a <constant>POLLERR</constant> as above. Otherwise it waits
|
|
||||||
until data has been captured and can be read. When the driver captures
|
|
||||||
continuously (as opposed to, for example, still images) the function
|
|
||||||
may return immediately.</para>
|
|
||||||
|
|
||||||
<para>When use of the <function>write()</function> function has
|
|
||||||
been negotiated and the driver does not stream yet, the
|
|
||||||
<function>poll</function> function starts streaming. When that fails
|
|
||||||
it returns a <constant>POLLERR</constant> as above. Otherwise it waits
|
|
||||||
until the driver is ready for a non-blocking
|
|
||||||
<function>write()</function> call.</para>
|
|
||||||
|
|
||||||
<para>If the caller is only interested in events (just
|
|
||||||
<constant>POLLPRI</constant> is set in the <structfield>events</structfield>
|
|
||||||
field), then <function>poll()</function> will <emphasis>not</emphasis>
|
|
||||||
start streaming if the driver does not stream yet. This makes it
|
|
||||||
possible to just poll for events and not for buffers.</para>
|
|
||||||
|
|
||||||
<para>All drivers implementing the <function>read()</function> or
|
|
||||||
<function>write()</function> function or streaming I/O must also
|
|
||||||
support the <function>poll()</function> function.</para>
|
|
||||||
|
|
||||||
<para>For more details see the
|
|
||||||
<function>poll()</function> manual page.</para>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Return Value</title>
|
|
||||||
|
|
||||||
<para>On success, <function>poll()</function> returns the number
|
|
||||||
structures which have non-zero <structfield>revents</structfield>
|
|
||||||
fields, or zero if the call timed out. On error
|
|
||||||
<returnvalue>-1</returnvalue> is returned, and the
|
|
||||||
<varname>errno</varname> variable is set appropriately:</para>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EBADF</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>One or more of the <parameter>ufds</parameter> members
|
|
||||||
specify an invalid file descriptor.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EBUSY</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The driver does not support multiple read or write
|
|
||||||
streams and the device is already in use.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EFAULT</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para><parameter>ufds</parameter> references an inaccessible
|
|
||||||
memory area.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EINTR</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The call was interrupted by a signal.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EINVAL</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The <parameter>nfds</parameter> argument is greater
|
|
||||||
than <constant>OPEN_MAX</constant>.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
@@ -1,181 +0,0 @@
|
|||||||
<refentry id="func-read">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>V4L2 read()</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>v4l2-read</refname>
|
|
||||||
<refpurpose>Read from a V4L2 device</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcsynopsisinfo>#include <unistd.h></funcsynopsisinfo>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>ssize_t <function>read</function></funcdef>
|
|
||||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
|
||||||
<paramdef>void *<parameter>buf</parameter></paramdef>
|
|
||||||
<paramdef>size_t <parameter>count</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>fd</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>&fd;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>buf</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para></para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>count</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para></para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
|
|
||||||
<para><function>read()</function> attempts to read up to
|
|
||||||
<parameter>count</parameter> bytes from file descriptor
|
|
||||||
<parameter>fd</parameter> into the buffer starting at
|
|
||||||
<parameter>buf</parameter>. The layout of the data in the buffer is
|
|
||||||
discussed in the respective device interface section, see ##. If <parameter>count</parameter> is zero,
|
|
||||||
<function>read()</function> returns zero and has no other results. If
|
|
||||||
<parameter>count</parameter> is greater than
|
|
||||||
<constant>SSIZE_MAX</constant>, the result is unspecified. Regardless
|
|
||||||
of the <parameter>count</parameter> value each
|
|
||||||
<function>read()</function> call will provide at most one frame (two
|
|
||||||
fields) worth of data.</para>
|
|
||||||
|
|
||||||
<para>By default <function>read()</function> blocks until data
|
|
||||||
becomes available. When the <constant>O_NONBLOCK</constant> flag was
|
|
||||||
given to the &func-open; function it
|
|
||||||
returns immediately with an &EAGAIN; when no data is available. The
|
|
||||||
&func-select; or &func-poll; functions
|
|
||||||
can always be used to suspend execution until data becomes available. All
|
|
||||||
drivers supporting the <function>read()</function> function must also
|
|
||||||
support <function>select()</function> and
|
|
||||||
<function>poll()</function>.</para>
|
|
||||||
|
|
||||||
<para>Drivers can implement read functionality in different
|
|
||||||
ways, using a single or multiple buffers and discarding the oldest or
|
|
||||||
newest frames once the internal buffers are filled.</para>
|
|
||||||
|
|
||||||
<para><function>read()</function> never returns a "snapshot" of a
|
|
||||||
buffer being filled. Using a single buffer the driver will stop
|
|
||||||
capturing when the application starts reading the buffer until the
|
|
||||||
read is finished. Thus only the period of the vertical blanking
|
|
||||||
interval is available for reading, or the capture rate must fall below
|
|
||||||
the nominal frame rate of the video standard.</para>
|
|
||||||
|
|
||||||
<para>The behavior of
|
|
||||||
<function>read()</function> when called during the active picture
|
|
||||||
period or the vertical blanking separating the top and bottom field
|
|
||||||
depends on the discarding policy. A driver discarding the oldest
|
|
||||||
frames keeps capturing into an internal buffer, continuously
|
|
||||||
overwriting the previously, not read frame, and returns the frame
|
|
||||||
being received at the time of the <function>read()</function> call as
|
|
||||||
soon as it is complete.</para>
|
|
||||||
|
|
||||||
<para>A driver discarding the newest frames stops capturing until
|
|
||||||
the next <function>read()</function> call. The frame being received at
|
|
||||||
<function>read()</function> time is discarded, returning the following
|
|
||||||
frame instead. Again this implies a reduction of the capture rate to
|
|
||||||
one half or less of the nominal frame rate. An example of this model
|
|
||||||
is the video read mode of the bttv driver, initiating a DMA to user
|
|
||||||
memory when <function>read()</function> is called and returning when
|
|
||||||
the DMA finished.</para>
|
|
||||||
|
|
||||||
<para>In the multiple buffer model drivers maintain a ring of
|
|
||||||
internal buffers, automatically advancing to the next free buffer.
|
|
||||||
This allows continuous capturing when the application can empty the
|
|
||||||
buffers fast enough. Again, the behavior when the driver runs out of
|
|
||||||
free buffers depends on the discarding policy.</para>
|
|
||||||
|
|
||||||
<para>Applications can get and set the number of buffers used
|
|
||||||
internally by the driver with the &VIDIOC-G-PARM; and &VIDIOC-S-PARM;
|
|
||||||
ioctls. They are optional, however. The discarding policy is not
|
|
||||||
reported and cannot be changed. For minimum requirements see <xref
|
|
||||||
linkend="devices" />.</para>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Return Value</title>
|
|
||||||
|
|
||||||
<para>On success, the number of bytes read is returned. It is not
|
|
||||||
an error if this number is smaller than the number of bytes requested,
|
|
||||||
or the amount of data required for one frame. This may happen for
|
|
||||||
example because <function>read()</function> was interrupted by a
|
|
||||||
signal. On error, -1 is returned, and the <varname>errno</varname>
|
|
||||||
variable is set appropriately. In this case the next read will start
|
|
||||||
at the beginning of a new frame. Possible error codes are:</para>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EAGAIN</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Non-blocking I/O has been selected using
|
|
||||||
O_NONBLOCK and no data was immediately available for reading.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EBADF</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para><parameter>fd</parameter> is not a valid file
|
|
||||||
descriptor or is not open for reading, or the process already has the
|
|
||||||
maximum number of files open.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EBUSY</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The driver does not support multiple read streams and the
|
|
||||||
device is already in use.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EFAULT</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para><parameter>buf</parameter> references an inaccessible
|
|
||||||
memory area.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EINTR</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The call was interrupted by a signal before any
|
|
||||||
data was read.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EIO</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>I/O error. This indicates some hardware problem or a
|
|
||||||
failure to communicate with a remote device (USB camera etc.).</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EINVAL</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The <function>read()</function> function is not
|
|
||||||
supported by this driver, not on this device, or generally not on this
|
|
||||||
type of device.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
@@ -1,130 +0,0 @@
|
|||||||
<refentry id="func-select">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>V4L2 select()</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>v4l2-select</refname>
|
|
||||||
<refpurpose>Synchronous I/O multiplexing</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcsynopsisinfo>
|
|
||||||
#include <sys/time.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <unistd.h></funcsynopsisinfo>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>select</function></funcdef>
|
|
||||||
<paramdef>int <parameter>nfds</parameter></paramdef>
|
|
||||||
<paramdef>fd_set *<parameter>readfds</parameter></paramdef>
|
|
||||||
<paramdef>fd_set *<parameter>writefds</parameter></paramdef>
|
|
||||||
<paramdef>fd_set *<parameter>exceptfds</parameter></paramdef>
|
|
||||||
<paramdef>struct timeval *<parameter>timeout</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
|
|
||||||
<para>With the <function>select()</function> function applications
|
|
||||||
can suspend execution until the driver has captured data or is ready
|
|
||||||
to accept data for output.</para>
|
|
||||||
|
|
||||||
<para>When streaming I/O has been negotiated this function waits
|
|
||||||
until a buffer has been filled or displayed and can be dequeued with
|
|
||||||
the &VIDIOC-DQBUF; ioctl. When buffers are already in the outgoing
|
|
||||||
queue of the driver the function returns immediately.</para>
|
|
||||||
|
|
||||||
<para>On success <function>select()</function> returns the total
|
|
||||||
number of bits set in the <structname>fd_set</structname>s. When the
|
|
||||||
function timed out it returns a value of zero. On failure it returns
|
|
||||||
<returnvalue>-1</returnvalue> and the <varname>errno</varname>
|
|
||||||
variable is set appropriately. When the application did not call
|
|
||||||
&VIDIOC-QBUF; or &VIDIOC-STREAMON; yet the
|
|
||||||
<function>select()</function> function succeeds, setting the bit of
|
|
||||||
the file descriptor in <parameter>readfds</parameter> or
|
|
||||||
<parameter>writefds</parameter>, but subsequent &VIDIOC-DQBUF; calls
|
|
||||||
will fail.<footnote><para>The Linux kernel implements
|
|
||||||
<function>select()</function> like the &func-poll; function, but
|
|
||||||
<function>select()</function> cannot return a
|
|
||||||
<constant>POLLERR</constant>.</para>
|
|
||||||
</footnote></para>
|
|
||||||
|
|
||||||
<para>When use of the <function>read()</function> function has
|
|
||||||
been negotiated and the driver does not capture yet, the
|
|
||||||
<function>select()</function> function starts capturing. When that
|
|
||||||
fails, <function>select()</function> returns successful and a
|
|
||||||
subsequent <function>read()</function> call, which also attempts to
|
|
||||||
start capturing, will return an appropriate error code. When the
|
|
||||||
driver captures continuously (as opposed to, for example, still
|
|
||||||
images) and data is already available the
|
|
||||||
<function>select()</function> function returns immediately.</para>
|
|
||||||
|
|
||||||
<para>When use of the <function>write()</function> function has
|
|
||||||
been negotiated the <function>select()</function> function just waits
|
|
||||||
until the driver is ready for a non-blocking
|
|
||||||
<function>write()</function> call.</para>
|
|
||||||
|
|
||||||
<para>All drivers implementing the <function>read()</function> or
|
|
||||||
<function>write()</function> function or streaming I/O must also
|
|
||||||
support the <function>select()</function> function.</para>
|
|
||||||
|
|
||||||
<para>For more details see the <function>select()</function>
|
|
||||||
manual page.</para>
|
|
||||||
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Return Value</title>
|
|
||||||
|
|
||||||
<para>On success, <function>select()</function> returns the number
|
|
||||||
of descriptors contained in the three returned descriptor sets, which
|
|
||||||
will be zero if the timeout expired. On error
|
|
||||||
<returnvalue>-1</returnvalue> is returned, and the
|
|
||||||
<varname>errno</varname> variable is set appropriately; the sets and
|
|
||||||
<parameter>timeout</parameter> are undefined. Possible error codes
|
|
||||||
are:</para>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EBADF</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>One or more of the file descriptor sets specified a
|
|
||||||
file descriptor that is not open.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EBUSY</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The driver does not support multiple read or write
|
|
||||||
streams and the device is already in use.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EFAULT</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The <parameter>readfds</parameter>,
|
|
||||||
<parameter>writefds</parameter>, <parameter>exceptfds</parameter> or
|
|
||||||
<parameter>timeout</parameter> pointer references an inaccessible memory
|
|
||||||
area.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EINTR</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The call was interrupted by a signal.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EINVAL</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The <parameter>nfds</parameter> argument is less than
|
|
||||||
zero or greater than <constant>FD_SETSIZE</constant>.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
@@ -1,128 +0,0 @@
|
|||||||
<refentry id="func-write">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>V4L2 write()</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>v4l2-write</refname>
|
|
||||||
<refpurpose>Write to a V4L2 device</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcsynopsisinfo>#include <unistd.h></funcsynopsisinfo>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>ssize_t <function>write</function></funcdef>
|
|
||||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
|
||||||
<paramdef>void *<parameter>buf</parameter></paramdef>
|
|
||||||
<paramdef>size_t <parameter>count</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>fd</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>&fd;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>buf</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para></para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>count</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para></para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
|
|
||||||
<para><function>write()</function> writes up to
|
|
||||||
<parameter>count</parameter> bytes to the device referenced by the
|
|
||||||
file descriptor <parameter>fd</parameter> from the buffer starting at
|
|
||||||
<parameter>buf</parameter>. When the hardware outputs are not active
|
|
||||||
yet, this function enables them. When <parameter>count</parameter> is
|
|
||||||
zero, <function>write()</function> returns
|
|
||||||
<returnvalue>0</returnvalue> without any other effect.</para>
|
|
||||||
|
|
||||||
<para>When the application does not provide more data in time, the
|
|
||||||
previous video frame, raw VBI image, sliced VPS or WSS data is
|
|
||||||
displayed again. Sliced Teletext or Closed Caption data is not
|
|
||||||
repeated, the driver inserts a blank line instead.</para>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Return Value</title>
|
|
||||||
|
|
||||||
<para>On success, the number of bytes written are returned. Zero
|
|
||||||
indicates nothing was written. On error, <returnvalue>-1</returnvalue>
|
|
||||||
is returned, and the <varname>errno</varname> variable is set
|
|
||||||
appropriately. In this case the next write will start at the beginning
|
|
||||||
of a new frame. Possible error codes are:</para>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EAGAIN</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Non-blocking I/O has been selected using the <link
|
|
||||||
linkend="func-open"><constant>O_NONBLOCK</constant></link> flag and no
|
|
||||||
buffer space was available to write the data immediately.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EBADF</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para><parameter>fd</parameter> is not a valid file
|
|
||||||
descriptor or is not open for writing.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EBUSY</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The driver does not support multiple write streams and the
|
|
||||||
device is already in use.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EFAULT</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para><parameter>buf</parameter> references an inaccessible
|
|
||||||
memory area.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EINTR</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The call was interrupted by a signal before any
|
|
||||||
data was written.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EIO</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>I/O error. This indicates some hardware problem.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EINVAL</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The <function>write()</function> function is not
|
|
||||||
supported by this driver, not on this device, or generally not on this
|
|
||||||
type of device.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
@@ -1,77 +0,0 @@
|
|||||||
<title>Generic Error Codes</title>
|
|
||||||
|
|
||||||
<table frame="none" pgwide="1" id="gen-errors">
|
|
||||||
<title>Generic error codes</title>
|
|
||||||
<tgroup cols="2">
|
|
||||||
&cs-str;
|
|
||||||
<tbody valign="top">
|
|
||||||
<!-- Keep it ordered alphabetically -->
|
|
||||||
<row>
|
|
||||||
<entry>EAGAIN (aka EWOULDBLOCK)</entry>
|
|
||||||
<entry>The ioctl can't be handled because the device is in state where
|
|
||||||
it can't perform it. This could happen for example in case where
|
|
||||||
device is sleeping and ioctl is performed to query statistics.
|
|
||||||
It is also returned when the ioctl would need to wait
|
|
||||||
for an event, but the device was opened in non-blocking mode.
|
|
||||||
</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>EBADF</entry>
|
|
||||||
<entry>The file descriptor is not a valid.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>EBUSY</entry>
|
|
||||||
<entry>The ioctl can't be handled because the device is busy. This is
|
|
||||||
typically return while device is streaming, and an ioctl tried to
|
|
||||||
change something that would affect the stream, or would require the
|
|
||||||
usage of a hardware resource that was already allocated. The ioctl
|
|
||||||
must not be retried without performing another action to fix the
|
|
||||||
problem first (typically: stop the stream before retrying).</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>EFAULT</entry>
|
|
||||||
<entry>There was a failure while copying data from/to userspace,
|
|
||||||
probably caused by an invalid pointer reference.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>EINVAL</entry>
|
|
||||||
<entry>One or more of the ioctl parameters are invalid or out of the
|
|
||||||
allowed range. This is a widely used error code. See the individual
|
|
||||||
ioctl requests for specific causes.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>ENODEV</entry>
|
|
||||||
<entry>Device not found or was removed.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>ENOMEM</entry>
|
|
||||||
<entry>There's not enough memory to handle the desired operation.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>ENOTTY</entry>
|
|
||||||
<entry>The ioctl is not supported by the driver, actually meaning that
|
|
||||||
the required functionality is not available, or the file
|
|
||||||
descriptor is not for a media device.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>ENOSPC</entry>
|
|
||||||
<entry>On USB devices, the stream ioctl's can return this error, meaning
|
|
||||||
that this request would overcommit the usb bandwidth reserved
|
|
||||||
for periodic transfers (up to 80% of the USB bandwidth).</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>EPERM</entry>
|
|
||||||
<entry>Permission denied. Can be returned if the device needs write
|
|
||||||
permission, or some special capabilities is needed
|
|
||||||
(e. g. root)</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<para>Note 1: ioctls may return other error codes. Since errors may have side
|
|
||||||
effects such as a driver reset, applications should abort on unexpected errors.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>Note 2: Request-specific error codes are listed in the individual
|
|
||||||
requests descriptions.</para>
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,172 +0,0 @@
|
|||||||
<programlisting>
|
|
||||||
/* keytable.c - This program allows checking/replacing keys at IR
|
|
||||||
|
|
||||||
Copyright (C) 2006-2009 Mauro Carvalho Chehab <mchehab@infradead.org>
|
|
||||||
|
|
||||||
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, version 2 of the License.
|
|
||||||
|
|
||||||
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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <linux/input.h>
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
|
|
||||||
#include "parse.h"
|
|
||||||
|
|
||||||
void prtcode (int *codes)
|
|
||||||
{
|
|
||||||
struct parse_key *p;
|
|
||||||
|
|
||||||
for (p=keynames;p->name!=NULL;p++) {
|
|
||||||
if (p->value == (unsigned)codes[1]) {
|
|
||||||
printf("scancode 0x%04x = %s (0x%02x)\n", codes[0], p->name, codes[1]);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isprint (codes[1]))
|
|
||||||
printf("scancode %d = '%c' (0x%02x)\n", codes[0], codes[1], codes[1]);
|
|
||||||
else
|
|
||||||
printf("scancode %d = 0x%02x\n", codes[0], codes[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
int parse_code(char *string)
|
|
||||||
{
|
|
||||||
struct parse_key *p;
|
|
||||||
|
|
||||||
for (p=keynames;p->name!=NULL;p++) {
|
|
||||||
if (!strcasecmp(p->name, string)) {
|
|
||||||
return p->value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main (int argc, char *argv[])
|
|
||||||
{
|
|
||||||
int fd;
|
|
||||||
unsigned int i, j;
|
|
||||||
int codes[2];
|
|
||||||
|
|
||||||
if (argc<2 || argc>4) {
|
|
||||||
printf ("usage: %s <device> to get table; or\n"
|
|
||||||
" %s <device> <scancode> <keycode>\n"
|
|
||||||
" %s <device> <keycode_file>\n",*argv,*argv,*argv);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((fd = open(argv[1], O_RDONLY)) < 0) {
|
|
||||||
perror("Couldn't open input device");
|
|
||||||
return(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (argc==4) {
|
|
||||||
int value;
|
|
||||||
|
|
||||||
value=parse_code(argv[3]);
|
|
||||||
|
|
||||||
if (value==-1) {
|
|
||||||
value = strtol(argv[3], NULL, 0);
|
|
||||||
if (errno)
|
|
||||||
perror("value");
|
|
||||||
}
|
|
||||||
|
|
||||||
codes [0] = (unsigned) strtol(argv[2], NULL, 0);
|
|
||||||
codes [1] = (unsigned) value;
|
|
||||||
|
|
||||||
if(ioctl(fd, EVIOCSKEYCODE, codes))
|
|
||||||
perror ("EVIOCSKEYCODE");
|
|
||||||
|
|
||||||
if(ioctl(fd, EVIOCGKEYCODE, codes)==0)
|
|
||||||
prtcode(codes);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (argc==3) {
|
|
||||||
FILE *fin;
|
|
||||||
int value;
|
|
||||||
char *scancode, *keycode, s[2048];
|
|
||||||
|
|
||||||
fin=fopen(argv[2],"r");
|
|
||||||
if (fin==NULL) {
|
|
||||||
perror ("opening keycode file");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Clears old table */
|
|
||||||
for (j = 0; j < 256; j++) {
|
|
||||||
for (i = 0; i < 256; i++) {
|
|
||||||
codes[0] = (j << 8) | i;
|
|
||||||
codes[1] = KEY_RESERVED;
|
|
||||||
ioctl(fd, EVIOCSKEYCODE, codes);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
while (fgets(s,sizeof(s),fin)) {
|
|
||||||
scancode=strtok(s,"\n\t =:");
|
|
||||||
if (!scancode) {
|
|
||||||
perror ("parsing input file scancode");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (!strcasecmp(scancode, "scancode")) {
|
|
||||||
scancode = strtok(NULL,"\n\t =:");
|
|
||||||
if (!scancode) {
|
|
||||||
perror ("parsing input file scancode");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
keycode=strtok(NULL,"\n\t =:(");
|
|
||||||
if (!keycode) {
|
|
||||||
perror ("parsing input file keycode");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// printf ("parsing %s=%s:", scancode, keycode);
|
|
||||||
value=parse_code(keycode);
|
|
||||||
// printf ("\tvalue=%d\n",value);
|
|
||||||
|
|
||||||
if (value==-1) {
|
|
||||||
value = strtol(keycode, NULL, 0);
|
|
||||||
if (errno)
|
|
||||||
perror("value");
|
|
||||||
}
|
|
||||||
|
|
||||||
codes [0] = (unsigned) strtol(scancode, NULL, 0);
|
|
||||||
codes [1] = (unsigned) value;
|
|
||||||
|
|
||||||
// printf("\t%04x=%04x\n",codes[0], codes[1]);
|
|
||||||
if(ioctl(fd, EVIOCSKEYCODE, codes)) {
|
|
||||||
fprintf(stderr, "Setting scancode 0x%04x with 0x%04x via ",codes[0], codes[1]);
|
|
||||||
perror ("EVIOCSKEYCODE");
|
|
||||||
}
|
|
||||||
|
|
||||||
if(ioctl(fd, EVIOCGKEYCODE, codes)==0)
|
|
||||||
prtcode(codes);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Get scancode table */
|
|
||||||
for (j = 0; j < 256; j++) {
|
|
||||||
for (i = 0; i < 256; i++) {
|
|
||||||
codes[0] = (j << 8) | i;
|
|
||||||
if (!ioctl(fd, EVIOCGKEYCODE, codes) && codes[1] != KEY_RESERVED)
|
|
||||||
prtcode(codes);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
</programlisting>
|
|
||||||
@@ -1,160 +0,0 @@
|
|||||||
<title>Libv4l Userspace Library</title>
|
|
||||||
<section id="libv4l-introduction">
|
|
||||||
<title>Introduction</title>
|
|
||||||
|
|
||||||
<para>libv4l is a collection of libraries which adds a thin abstraction
|
|
||||||
layer on top of video4linux2 devices. The purpose of this (thin) layer
|
|
||||||
is to make it easy for application writers to support a wide variety of
|
|
||||||
devices without having to write separate code for different devices in the
|
|
||||||
same class.</para>
|
|
||||||
<para>An example of using libv4l is provided by
|
|
||||||
<link linkend='v4l2grab-example'>v4l2grab</link>.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>libv4l consists of 3 different libraries:</para>
|
|
||||||
<section>
|
|
||||||
<title>libv4lconvert</title>
|
|
||||||
|
|
||||||
<para>libv4lconvert is a library that converts several
|
|
||||||
different pixelformats found in V4L2 drivers into a few common RGB and
|
|
||||||
YUY formats.</para>
|
|
||||||
<para>It currently accepts the following V4L2 driver formats:
|
|
||||||
<link linkend="V4L2-PIX-FMT-BGR24"><constant>V4L2_PIX_FMT_BGR24</constant></link>,
|
|
||||||
<link linkend="V4L2-PIX-FMT-HM12"><constant>V4L2_PIX_FMT_HM12</constant></link>,
|
|
||||||
<link linkend="V4L2-PIX-FMT-JPEG"><constant>V4L2_PIX_FMT_JPEG</constant></link>,
|
|
||||||
<link linkend="V4L2-PIX-FMT-MJPEG"><constant>V4L2_PIX_FMT_MJPEG</constant></link>,
|
|
||||||
<link linkend="V4L2-PIX-FMT-MR97310A"><constant>V4L2_PIX_FMT_MR97310A</constant></link>,
|
|
||||||
<link linkend="V4L2-PIX-FMT-OV511"><constant>V4L2_PIX_FMT_OV511</constant></link>,
|
|
||||||
<link linkend="V4L2-PIX-FMT-OV518"><constant>V4L2_PIX_FMT_OV518</constant></link>,
|
|
||||||
<link linkend="V4L2-PIX-FMT-PAC207"><constant>V4L2_PIX_FMT_PAC207</constant></link>,
|
|
||||||
<link linkend="V4L2-PIX-FMT-PJPG"><constant>V4L2_PIX_FMT_PJPG</constant></link>,
|
|
||||||
<link linkend="V4L2-PIX-FMT-RGB24"><constant>V4L2_PIX_FMT_RGB24</constant></link>,
|
|
||||||
<link linkend="V4L2-PIX-FMT-SBGGR8"><constant>V4L2_PIX_FMT_SBGGR8</constant></link>,
|
|
||||||
<link linkend="V4L2-PIX-FMT-SGBRG8"><constant>V4L2_PIX_FMT_SGBRG8</constant></link>,
|
|
||||||
<link linkend="V4L2-PIX-FMT-SGRBG8"><constant>V4L2_PIX_FMT_SGRBG8</constant></link>,
|
|
||||||
<link linkend="V4L2-PIX-FMT-SN9C10X"><constant>V4L2_PIX_FMT_SN9C10X</constant></link>,
|
|
||||||
<link linkend="V4L2-PIX-FMT-SN9C20X-I420"><constant>V4L2_PIX_FMT_SN9C20X_I420</constant></link>,
|
|
||||||
<link linkend="V4L2-PIX-FMT-SPCA501"><constant>V4L2_PIX_FMT_SPCA501</constant></link>,
|
|
||||||
<link linkend="V4L2-PIX-FMT-SPCA505"><constant>V4L2_PIX_FMT_SPCA505</constant></link>,
|
|
||||||
<link linkend="V4L2-PIX-FMT-SPCA508"><constant>V4L2_PIX_FMT_SPCA508</constant></link>,
|
|
||||||
<link linkend="V4L2-PIX-FMT-SPCA561"><constant>V4L2_PIX_FMT_SPCA561</constant></link>,
|
|
||||||
<link linkend="V4L2-PIX-FMT-SQ905C"><constant>V4L2_PIX_FMT_SQ905C</constant></link>,
|
|
||||||
<constant>V4L2_PIX_FMT_SRGGB8</constant>,
|
|
||||||
<link linkend="V4L2-PIX-FMT-UYVY"><constant>V4L2_PIX_FMT_UYVY</constant></link>,
|
|
||||||
<link linkend="V4L2-PIX-FMT-YUV420"><constant>V4L2_PIX_FMT_YUV420</constant></link>,
|
|
||||||
<link linkend="V4L2-PIX-FMT-YUYV"><constant>V4L2_PIX_FMT_YUYV</constant></link>,
|
|
||||||
<link linkend="V4L2-PIX-FMT-YVU420"><constant>V4L2_PIX_FMT_YVU420</constant></link>,
|
|
||||||
and <link linkend="V4L2-PIX-FMT-YVYU"><constant>V4L2_PIX_FMT_YVYU</constant></link>.
|
|
||||||
</para>
|
|
||||||
<para>Later on libv4lconvert was expanded to also be able to do
|
|
||||||
various video processing functions to improve webcam video quality.
|
|
||||||
The video processing is split in to 2 parts: libv4lconvert/control and
|
|
||||||
libv4lconvert/processing.</para>
|
|
||||||
|
|
||||||
<para>The control part is used to offer video controls which can
|
|
||||||
be used to control the video processing functions made available by
|
|
||||||
libv4lconvert/processing. These controls are stored application wide
|
|
||||||
(until reboot) by using a persistent shared memory object.</para>
|
|
||||||
|
|
||||||
<para>libv4lconvert/processing offers the actual video
|
|
||||||
processing functionality.</para>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<title>libv4l1</title>
|
|
||||||
<para>This library offers functions that can be used to quickly
|
|
||||||
make v4l1 applications work with v4l2 devices. These functions work exactly
|
|
||||||
like the normal open/close/etc, except that libv4l1 does full emulation of
|
|
||||||
the v4l1 api on top of v4l2 drivers, in case of v4l1 drivers it
|
|
||||||
will just pass calls through.</para>
|
|
||||||
<para>Since those functions are emulations of the old V4L1 API,
|
|
||||||
it shouldn't be used for new applications.</para>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<title>libv4l2</title>
|
|
||||||
<para>This library should be used for all modern V4L2
|
|
||||||
applications.</para>
|
|
||||||
<para>It provides handles to call V4L2 open/ioctl/close/poll
|
|
||||||
methods. Instead of just providing the raw output of the device, it enhances
|
|
||||||
the calls in the sense that it will use libv4lconvert to provide more video
|
|
||||||
formats and to enhance the image quality.</para>
|
|
||||||
<para>In most cases, libv4l2 just passes the calls directly
|
|
||||||
through to the v4l2 driver, intercepting the calls to
|
|
||||||
<link linkend='vidioc-g-fmt'><constant>VIDIOC_TRY_FMT</constant></link>,
|
|
||||||
<link linkend='vidioc-g-fmt'><constant>VIDIOC_G_FMT</constant></link>
|
|
||||||
<link linkend='vidioc-g-fmt'><constant>VIDIOC_S_FMT</constant></link>
|
|
||||||
<link linkend='vidioc-enum-framesizes'><constant>VIDIOC_ENUM_FRAMESIZES</constant></link>
|
|
||||||
and <link linkend='vidioc-enum-frameintervals'><constant>VIDIOC_ENUM_FRAMEINTERVALS</constant></link>
|
|
||||||
in order to emulate the formats
|
|
||||||
<link linkend="V4L2-PIX-FMT-BGR24"><constant>V4L2_PIX_FMT_BGR24</constant></link>,
|
|
||||||
<link linkend="V4L2-PIX-FMT-RGB24"><constant>V4L2_PIX_FMT_RGB24</constant></link>,
|
|
||||||
<link linkend="V4L2-PIX-FMT-YUV420"><constant>V4L2_PIX_FMT_YUV420</constant></link>,
|
|
||||||
and <link linkend="V4L2-PIX-FMT-YVU420"><constant>V4L2_PIX_FMT_YVU420</constant></link>,
|
|
||||||
if they aren't available in the driver.
|
|
||||||
<link linkend='vidioc-enum-fmt'><constant>VIDIOC_ENUM_FMT</constant></link>
|
|
||||||
keeps enumerating the hardware supported formats, plus the emulated formats
|
|
||||||
offered by libv4l at the end.
|
|
||||||
</para>
|
|
||||||
<section id="libv4l-ops">
|
|
||||||
<title>Libv4l device control functions</title>
|
|
||||||
<para>The common file operation methods are provided by
|
|
||||||
libv4l.</para>
|
|
||||||
<para>Those functions operate just like glibc
|
|
||||||
open/close/dup/ioctl/read/mmap/munmap:</para>
|
|
||||||
<itemizedlist><listitem>
|
|
||||||
<para>int v4l2_open(const char *file, int oflag,
|
|
||||||
...) -
|
|
||||||
operates like the standard <link linkend='func-open'>open()</link> function.
|
|
||||||
</para></listitem><listitem>
|
|
||||||
<para>int v4l2_close(int fd) -
|
|
||||||
operates like the standard <link linkend='func-close'>close()</link> function.
|
|
||||||
</para></listitem><listitem>
|
|
||||||
<para>int v4l2_dup(int fd) -
|
|
||||||
operates like the standard dup() function, duplicating a file handler.
|
|
||||||
</para></listitem><listitem>
|
|
||||||
<para>int v4l2_ioctl (int fd, unsigned long int request, ...) -
|
|
||||||
operates like the standard <link linkend='func-ioctl'>ioctl()</link> function.
|
|
||||||
</para></listitem><listitem>
|
|
||||||
<para>int v4l2_read (int fd, void* buffer, size_t n) -
|
|
||||||
operates like the standard <link linkend='func-read'>read()</link> function.
|
|
||||||
</para></listitem><listitem>
|
|
||||||
<para>void v4l2_mmap(void *start, size_t length, int prot, int flags, int fd, int64_t offset); -
|
|
||||||
operates like the standard <link linkend='func-mmap'>mmap()</link> function.
|
|
||||||
</para></listitem><listitem>
|
|
||||||
<para>int v4l2_munmap(void *_start, size_t length); -
|
|
||||||
operates like the standard <link linkend='func-munmap'>munmap()</link> function.
|
|
||||||
</para></listitem>
|
|
||||||
</itemizedlist>
|
|
||||||
<para>Those functions provide additional control:</para>
|
|
||||||
<itemizedlist><listitem>
|
|
||||||
<para>int v4l2_fd_open(int fd, int v4l2_flags) -
|
|
||||||
opens an already opened fd for further use through v4l2lib and possibly
|
|
||||||
modify libv4l2's default behavior through the v4l2_flags argument.
|
|
||||||
Currently, v4l2_flags can be <constant>V4L2_DISABLE_CONVERSION</constant>,
|
|
||||||
to disable format conversion.
|
|
||||||
</para></listitem><listitem>
|
|
||||||
<para>int v4l2_set_control(int fd, int cid, int value) -
|
|
||||||
This function takes a value of 0 - 65535, and then scales that range to
|
|
||||||
the actual range of the given v4l control id, and then if the cid exists
|
|
||||||
and is not locked sets the cid to the scaled value.
|
|
||||||
</para></listitem><listitem>
|
|
||||||
<para>int v4l2_get_control(int fd, int cid) -
|
|
||||||
This function returns a value of 0 - 65535, scaled to from the actual range
|
|
||||||
of the given v4l control id. when the cid does not exist, could not be
|
|
||||||
accessed for some reason, or some error occurred 0 is returned.
|
|
||||||
</para></listitem>
|
|
||||||
</itemizedlist>
|
|
||||||
</section>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
|
|
||||||
<title>v4l1compat.so wrapper library</title>
|
|
||||||
|
|
||||||
<para>This library intercepts calls to
|
|
||||||
open/close/ioctl/mmap/mmunmap operations and redirects them to the libv4l
|
|
||||||
counterparts, by using LD_PRELOAD=/usr/lib/v4l1compat.so. It also
|
|
||||||
emulates V4L1 calls via V4L2 API.</para>
|
|
||||||
<para>It allows usage of binary legacy applications that
|
|
||||||
still don't use libv4l.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
@@ -1,255 +0,0 @@
|
|||||||
<section id="lirc_dev">
|
|
||||||
<title>LIRC Device Interface</title>
|
|
||||||
|
|
||||||
|
|
||||||
<section id="lirc_dev_intro">
|
|
||||||
<title>Introduction</title>
|
|
||||||
|
|
||||||
<para>The LIRC device interface is a bi-directional interface for
|
|
||||||
transporting raw IR data between userspace and kernelspace. Fundamentally,
|
|
||||||
it is just a chardev (/dev/lircX, for X = 0, 1, 2, ...), with a number
|
|
||||||
of standard struct file_operations defined on it. With respect to
|
|
||||||
transporting raw IR data to and fro, the essential fops are read, write
|
|
||||||
and ioctl.</para>
|
|
||||||
|
|
||||||
<para>Example dmesg output upon a driver registering w/LIRC:</para>
|
|
||||||
<blockquote>
|
|
||||||
<para>$ dmesg |grep lirc_dev</para>
|
|
||||||
<para>lirc_dev: IR Remote Control driver registered, major 248</para>
|
|
||||||
<para>rc rc0: lirc_dev: driver ir-lirc-codec (mceusb) registered at minor = 0</para>
|
|
||||||
</blockquote>
|
|
||||||
|
|
||||||
<para>What you should see for a chardev:</para>
|
|
||||||
<blockquote>
|
|
||||||
<para>$ ls -l /dev/lirc*</para>
|
|
||||||
<para>crw-rw---- 1 root root 248, 0 Jul 2 22:20 /dev/lirc0</para>
|
|
||||||
</blockquote>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="lirc_read">
|
|
||||||
<title>LIRC read fop</title>
|
|
||||||
|
|
||||||
<para>The lircd userspace daemon reads raw IR data from the LIRC chardev. The
|
|
||||||
exact format of the data depends on what modes a driver supports, and what
|
|
||||||
mode has been selected. lircd obtains supported modes and sets the active mode
|
|
||||||
via the ioctl interface, detailed at <xref linkend="lirc_ioctl"/>. The generally
|
|
||||||
preferred mode is LIRC_MODE_MODE2, in which packets containing an int value
|
|
||||||
describing an IR signal are read from the chardev.</para>
|
|
||||||
|
|
||||||
<para>See also <ulink url="http://www.lirc.org/html/technical.html">http://www.lirc.org/html/technical.html</ulink> for more info.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="lirc_write">
|
|
||||||
<title>LIRC write fop</title>
|
|
||||||
|
|
||||||
<para>The data written to the chardev is a pulse/space sequence of integer
|
|
||||||
values. Pulses and spaces are only marked implicitly by their position. The
|
|
||||||
data must start and end with a pulse, therefore, the data must always include
|
|
||||||
an uneven number of samples. The write function must block until the data has
|
|
||||||
been transmitted by the hardware. If more data is provided than the hardware
|
|
||||||
can send, the driver returns EINVAL.</para>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="lirc_ioctl">
|
|
||||||
<title>LIRC ioctl fop</title>
|
|
||||||
|
|
||||||
<para>The LIRC device's ioctl definition is bound by the ioctl function
|
|
||||||
definition of struct file_operations, leaving us with an unsigned int
|
|
||||||
for the ioctl command and an unsigned long for the arg. For the purposes
|
|
||||||
of ioctl portability across 32-bit and 64-bit, these values are capped
|
|
||||||
to their 32-bit sizes.</para>
|
|
||||||
|
|
||||||
<para>The following ioctls can be used to change specific hardware settings.
|
|
||||||
In general each driver should have a default set of settings. The driver
|
|
||||||
implementation is expected to re-apply the default settings when the device
|
|
||||||
is closed by user-space, so that every application opening the device can rely
|
|
||||||
on working with the default settings initially.</para>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term>LIRC_GET_FEATURES</term>
|
|
||||||
<listitem>
|
|
||||||
<para>Obviously, get the underlying hardware device's features. If a driver
|
|
||||||
does not announce support of certain features, calling of the corresponding
|
|
||||||
ioctls is undefined.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term>LIRC_GET_SEND_MODE</term>
|
|
||||||
<listitem>
|
|
||||||
<para>Get supported transmit mode. Only LIRC_MODE_PULSE is supported by lircd.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term>LIRC_GET_REC_MODE</term>
|
|
||||||
<listitem>
|
|
||||||
<para>Get supported receive modes. Only LIRC_MODE_MODE2 and LIRC_MODE_LIRCCODE
|
|
||||||
are supported by lircd.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term>LIRC_GET_SEND_CARRIER</term>
|
|
||||||
<listitem>
|
|
||||||
<para>Get carrier frequency (in Hz) currently used for transmit.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term>LIRC_GET_REC_CARRIER</term>
|
|
||||||
<listitem>
|
|
||||||
<para>Get carrier frequency (in Hz) currently used for IR reception.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term>LIRC_{G,S}ET_{SEND,REC}_DUTY_CYCLE</term>
|
|
||||||
<listitem>
|
|
||||||
<para>Get/set the duty cycle (from 0 to 100) of the carrier signal. Currently,
|
|
||||||
no special meaning is defined for 0 or 100, but this could be used to switch
|
|
||||||
off carrier generation in the future, so these values should be reserved.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term>LIRC_GET_REC_RESOLUTION</term>
|
|
||||||
<listitem>
|
|
||||||
<para>Some receiver have maximum resolution which is defined by internal
|
|
||||||
sample rate or data format limitations. E.g. it's common that signals can
|
|
||||||
only be reported in 50 microsecond steps. This integer value is used by
|
|
||||||
lircd to automatically adjust the aeps tolerance value in the lircd
|
|
||||||
config file.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term>LIRC_GET_M{IN,AX}_TIMEOUT</term>
|
|
||||||
<listitem>
|
|
||||||
<para>Some devices have internal timers that can be used to detect when
|
|
||||||
there's no IR activity for a long time. This can help lircd in detecting
|
|
||||||
that a IR signal is finished and can speed up the decoding process.
|
|
||||||
Returns an integer value with the minimum/maximum timeout that can be
|
|
||||||
set. Some devices have a fixed timeout, in that case both ioctls will
|
|
||||||
return the same value even though the timeout cannot be changed.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term>LIRC_GET_M{IN,AX}_FILTER_{PULSE,SPACE}</term>
|
|
||||||
<listitem>
|
|
||||||
<para>Some devices are able to filter out spikes in the incoming signal
|
|
||||||
using given filter rules. These ioctls return the hardware capabilities
|
|
||||||
that describe the bounds of the possible filters. Filter settings depend
|
|
||||||
on the IR protocols that are expected. lircd derives the settings from
|
|
||||||
all protocols definitions found in its config file.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term>LIRC_GET_LENGTH</term>
|
|
||||||
<listitem>
|
|
||||||
<para>Retrieves the code length in bits (only for LIRC_MODE_LIRCCODE).
|
|
||||||
Reads on the device must be done in blocks matching the bit count.
|
|
||||||
The bit could should be rounded up so that it matches full bytes.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term>LIRC_SET_{SEND,REC}_MODE</term>
|
|
||||||
<listitem>
|
|
||||||
<para>Set send/receive mode. Largely obsolete for send, as only
|
|
||||||
LIRC_MODE_PULSE is supported.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term>LIRC_SET_{SEND,REC}_CARRIER</term>
|
|
||||||
<listitem>
|
|
||||||
<para>Set send/receive carrier (in Hz).</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term>LIRC_SET_TRANSMITTER_MASK</term>
|
|
||||||
<listitem>
|
|
||||||
<para>This enables the given set of transmitters. The first transmitter
|
|
||||||
is encoded by the least significant bit, etc. When an invalid bit mask
|
|
||||||
is given, i.e. a bit is set, even though the device does not have so many
|
|
||||||
transitters, then this ioctl returns the number of available transitters
|
|
||||||
and does nothing otherwise.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term>LIRC_SET_REC_TIMEOUT</term>
|
|
||||||
<listitem>
|
|
||||||
<para>Sets the integer value for IR inactivity timeout (cf.
|
|
||||||
LIRC_GET_MIN_TIMEOUT and LIRC_GET_MAX_TIMEOUT). A value of 0 (if
|
|
||||||
supported by the hardware) disables all hardware timeouts and data should
|
|
||||||
be reported as soon as possible. If the exact value cannot be set, then
|
|
||||||
the next possible value _greater_ than the given value should be set.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term>LIRC_SET_REC_TIMEOUT_REPORTS</term>
|
|
||||||
<listitem>
|
|
||||||
<para>Enable (1) or disable (0) timeout reports in LIRC_MODE_MODE2. By
|
|
||||||
default, timeout reports should be turned off.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term>LIRC_SET_REC_FILTER_{,PULSE,SPACE}</term>
|
|
||||||
<listitem>
|
|
||||||
<para>Pulses/spaces shorter than this are filtered out by hardware. If
|
|
||||||
filters cannot be set independently for pulse/space, the corresponding
|
|
||||||
ioctls must return an error and LIRC_SET_REC_FILTER shall be used instead.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term>LIRC_SET_MEASURE_CARRIER_MODE</term>
|
|
||||||
<listitem>
|
|
||||||
<para>Enable (1)/disable (0) measure mode. If enabled, from the next key
|
|
||||||
press on, the driver will send LIRC_MODE2_FREQUENCY packets. By default
|
|
||||||
this should be turned off.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term>LIRC_SET_REC_{DUTY_CYCLE,CARRIER}_RANGE</term>
|
|
||||||
<listitem>
|
|
||||||
<para>To set a range use LIRC_SET_REC_DUTY_CYCLE_RANGE/LIRC_SET_REC_CARRIER_RANGE
|
|
||||||
with the lower bound first and later LIRC_SET_REC_DUTY_CYCLE/LIRC_SET_REC_CARRIER
|
|
||||||
with the upper bound.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term>LIRC_NOTIFY_DECODE</term>
|
|
||||||
<listitem>
|
|
||||||
<para>This ioctl is called by lircd whenever a successful decoding of an
|
|
||||||
incoming IR signal could be done. This can be used by supporting hardware
|
|
||||||
to give visual feedback to the user e.g. by flashing a LED.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term>LIRC_SETUP_{START,END}</term>
|
|
||||||
<listitem>
|
|
||||||
<para>Setting of several driver parameters can be optimized by encapsulating
|
|
||||||
the according ioctl calls with LIRC_SETUP_START/LIRC_SETUP_END. When a
|
|
||||||
driver receives a LIRC_SETUP_START ioctl it can choose to not commit
|
|
||||||
further setting changes to the hardware until a LIRC_SETUP_END is received.
|
|
||||||
But this is open to the driver implementation and every driver must also
|
|
||||||
handle parameter changes which are not encapsulated by LIRC_SETUP_START
|
|
||||||
and LIRC_SETUP_END. Drivers can also choose to ignore these ioctls.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term>LIRC_SET_WIDEBAND_RECEIVER</term>
|
|
||||||
<listitem>
|
|
||||||
<para>Some receivers are equipped with special wide band receiver which is intended
|
|
||||||
to be used to learn output of existing remote.
|
|
||||||
Calling that ioctl with (1) will enable it, and with (0) disable it.
|
|
||||||
This might be useful of receivers that have otherwise narrow band receiver
|
|
||||||
that prevents them to be used with some remotes.
|
|
||||||
Wide band receiver might also be more precise
|
|
||||||
On the other hand its disadvantage it usually reduced range of reception.
|
|
||||||
Note: wide band receiver might be implictly enabled if you enable
|
|
||||||
carrier reports. In that case it will be disabled as soon as you disable
|
|
||||||
carrier reports. Trying to disable wide band receiver while carrier
|
|
||||||
reports are active will do nothing.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
<section id="lirc_dev_errors">
|
|
||||||
&return-value;
|
|
||||||
</section>
|
|
||||||
</section>
|
|
||||||
</section>
|
|
||||||
@@ -1,105 +0,0 @@
|
|||||||
<partinfo>
|
|
||||||
<authorgroup>
|
|
||||||
<author>
|
|
||||||
<firstname>Laurent</firstname>
|
|
||||||
<surname>Pinchart</surname>
|
|
||||||
<affiliation><address><email>laurent.pinchart@ideasonboard.com</email></address></affiliation>
|
|
||||||
<contrib>Initial version.</contrib>
|
|
||||||
</author>
|
|
||||||
</authorgroup>
|
|
||||||
<copyright>
|
|
||||||
<year>2010</year>
|
|
||||||
<holder>Laurent Pinchart</holder>
|
|
||||||
</copyright>
|
|
||||||
|
|
||||||
<revhistory>
|
|
||||||
<!-- Put document revisions here, newest first. -->
|
|
||||||
<revision>
|
|
||||||
<revnumber>1.0.0</revnumber>
|
|
||||||
<date>2010-11-10</date>
|
|
||||||
<authorinitials>lp</authorinitials>
|
|
||||||
<revremark>Initial revision</revremark>
|
|
||||||
</revision>
|
|
||||||
</revhistory>
|
|
||||||
</partinfo>
|
|
||||||
|
|
||||||
<title>Media Controller API</title>
|
|
||||||
|
|
||||||
<chapter id="media_controller">
|
|
||||||
<title>Media Controller</title>
|
|
||||||
|
|
||||||
<section id="media-controller-intro">
|
|
||||||
<title>Introduction</title>
|
|
||||||
<para>Media devices increasingly handle multiple related functions. Many USB
|
|
||||||
cameras include microphones, video capture hardware can also output video,
|
|
||||||
or SoC camera interfaces also perform memory-to-memory operations similar to
|
|
||||||
video codecs.</para>
|
|
||||||
<para>Independent functions, even when implemented in the same hardware, can
|
|
||||||
be modelled as separate devices. A USB camera with a microphone will be
|
|
||||||
presented to userspace applications as V4L2 and ALSA capture devices. The
|
|
||||||
devices' relationships (when using a webcam, end-users shouldn't have to
|
|
||||||
manually select the associated USB microphone), while not made available
|
|
||||||
directly to applications by the drivers, can usually be retrieved from
|
|
||||||
sysfs.</para>
|
|
||||||
<para>With more and more advanced SoC devices being introduced, the current
|
|
||||||
approach will not scale. Device topologies are getting increasingly complex
|
|
||||||
and can't always be represented by a tree structure. Hardware blocks are
|
|
||||||
shared between different functions, creating dependencies between seemingly
|
|
||||||
unrelated devices.</para>
|
|
||||||
<para>Kernel abstraction APIs such as V4L2 and ALSA provide means for
|
|
||||||
applications to access hardware parameters. As newer hardware expose an
|
|
||||||
increasingly high number of those parameters, drivers need to guess what
|
|
||||||
applications really require based on limited information, thereby
|
|
||||||
implementing policies that belong to userspace.</para>
|
|
||||||
<para>The media controller API aims at solving those problems.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="media-controller-model">
|
|
||||||
<title>Media device model</title>
|
|
||||||
<para>Discovering a device internal topology, and configuring it at runtime,
|
|
||||||
is one of the goals of the media controller API. To achieve this, hardware
|
|
||||||
devices and Linux Kernel interfaces are modelled as graph objects on
|
|
||||||
an oriented graph. The object types that constitute the graph are:</para>
|
|
||||||
<itemizedlist>
|
|
||||||
<listitem><para>An <emphasis role="bold">entity</emphasis>
|
|
||||||
is a basic media hardware or software building block. It can correspond to
|
|
||||||
a large variety of logical blocks such as physical hardware devices
|
|
||||||
(CMOS sensor for instance), logical hardware devices (a building block in
|
|
||||||
a System-on-Chip image processing pipeline), DMA channels or physical
|
|
||||||
connectors.</para></listitem>
|
|
||||||
<listitem><para>An <emphasis role="bold">interface</emphasis>
|
|
||||||
is a graph representation of a Linux Kernel userspace API interface,
|
|
||||||
like a device node or a sysfs file that controls one or more entities
|
|
||||||
in the graph.</para></listitem>
|
|
||||||
<listitem><para>A <emphasis role="bold">pad</emphasis>
|
|
||||||
is a data connection endpoint through which an entity can interact with
|
|
||||||
other entities. Data (not restricted to video) produced by an entity
|
|
||||||
flows from the entity's output to one or more entity inputs. Pads should
|
|
||||||
not be confused with physical pins at chip boundaries.</para></listitem>
|
|
||||||
<listitem><para>A <emphasis role="bold">data link</emphasis>
|
|
||||||
is a point-to-point oriented connection between two pads, either on the
|
|
||||||
same entity or on different entities. Data flows from a source pad to a
|
|
||||||
sink pad.</para></listitem>
|
|
||||||
<listitem><para>An <emphasis role="bold">interface link</emphasis>
|
|
||||||
is a point-to-point bidirectional control connection between a Linux
|
|
||||||
Kernel interface and an entity.m</para></listitem>
|
|
||||||
</itemizedlist>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- All non-ioctl specific data types go here. -->
|
|
||||||
&sub-media-types;
|
|
||||||
</chapter>
|
|
||||||
|
|
||||||
<appendix id="media-user-func">
|
|
||||||
<title>Function Reference</title>
|
|
||||||
<!-- Keep this alphabetically sorted. -->
|
|
||||||
&sub-media-func-open;
|
|
||||||
&sub-media-func-close;
|
|
||||||
&sub-media-func-ioctl;
|
|
||||||
<!-- All ioctls go here. -->
|
|
||||||
&sub-media-ioc-device-info;
|
|
||||||
&sub-media-ioc-g-topology;
|
|
||||||
&sub-media-ioc-enum-entities;
|
|
||||||
&sub-media-ioc-enum-links;
|
|
||||||
&sub-media-ioc-setup-link;
|
|
||||||
</appendix>
|
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
<refentry id="media-func-close">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>media close()</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>media-close</refname>
|
|
||||||
<refpurpose>Close a media device</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcsynopsisinfo>#include <unistd.h></funcsynopsisinfo>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>close</function></funcdef>
|
|
||||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>fd</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>&fd;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
|
|
||||||
<para>Closes the media device. Resources associated with the file descriptor
|
|
||||||
are freed. The device configuration remain unchanged.</para>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Return Value</title>
|
|
||||||
|
|
||||||
<para><function>close</function> returns 0 on success. On error, -1 is
|
|
||||||
returned, and <varname>errno</varname> is set appropriately. Possible error
|
|
||||||
codes are:</para>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EBADF</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para><parameter>fd</parameter> is not a valid open file descriptor.
|
|
||||||
</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
<refentry id="media-func-ioctl">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>media ioctl()</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>media-ioctl</refname>
|
|
||||||
<refpurpose>Control a media device</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcsynopsisinfo>#include <sys/ioctl.h></funcsynopsisinfo>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>ioctl</function></funcdef>
|
|
||||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>request</parameter></paramdef>
|
|
||||||
<paramdef>void *<parameter>argp</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>fd</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>&fd;</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>request</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Media ioctl request code as defined in the media.h header file,
|
|
||||||
for example MEDIA_IOC_SETUP_LINK.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>argp</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Pointer to a request-specific structure.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
<para>The <function>ioctl()</function> function manipulates media device
|
|
||||||
parameters. The argument <parameter>fd</parameter> must be an open file
|
|
||||||
descriptor.</para>
|
|
||||||
<para>The ioctl <parameter>request</parameter> code specifies the media
|
|
||||||
function to be called. It has encoded in it whether the argument is an
|
|
||||||
input, output or read/write parameter, and the size of the argument
|
|
||||||
<parameter>argp</parameter> in bytes.</para>
|
|
||||||
<para>Macros and structures definitions specifying media ioctl requests and
|
|
||||||
their parameters are located in the media.h header file. All media ioctl
|
|
||||||
requests, their respective function and parameters are specified in
|
|
||||||
<xref linkend="media-user-func" />.</para>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
&return-value;
|
|
||||||
|
|
||||||
<para>Request-specific error codes are listed in the
|
|
||||||
individual requests descriptions.</para>
|
|
||||||
<para>When an ioctl that takes an output or read/write parameter fails,
|
|
||||||
the parameter remains unmodified.</para>
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
@@ -1,94 +0,0 @@
|
|||||||
<refentry id="media-func-open">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>media open()</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>media-open</refname>
|
|
||||||
<refpurpose>Open a media device</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcsynopsisinfo>#include <fcntl.h></funcsynopsisinfo>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>open</function></funcdef>
|
|
||||||
<paramdef>const char *<parameter>device_name</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>flags</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>device_name</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Device to be opened.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>flags</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Open flags. Access mode must be either <constant>O_RDONLY</constant>
|
|
||||||
or <constant>O_RDWR</constant>. Other flags have no effect.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
<para>To open a media device applications call <function>open()</function>
|
|
||||||
with the desired device name. The function has no side effects; the device
|
|
||||||
configuration remain unchanged.</para>
|
|
||||||
<para>When the device is opened in read-only mode, attempts to modify its
|
|
||||||
configuration will result in an error, and <varname>errno</varname> will be
|
|
||||||
set to <errorcode>EBADF</errorcode>.</para>
|
|
||||||
</refsect1>
|
|
||||||
<refsect1>
|
|
||||||
<title>Return Value</title>
|
|
||||||
|
|
||||||
<para><function>open</function> returns the new file descriptor on success.
|
|
||||||
On error, -1 is returned, and <varname>errno</varname> is set appropriately.
|
|
||||||
Possible error codes are:</para>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EACCES</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The requested access to the file is not allowed.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EMFILE</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The process already has the maximum number of files open.
|
|
||||||
</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>ENFILE</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The system limit on the total number of open files has been
|
|
||||||
reached.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>ENOMEM</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Insufficient kernel memory was available.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>ENXIO</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>No device corresponding to this device special file exists.
|
|
||||||
</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
@@ -1,132 +0,0 @@
|
|||||||
<refentry id="media-ioc-device-info">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>ioctl MEDIA_IOC_DEVICE_INFO</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>MEDIA_IOC_DEVICE_INFO</refname>
|
|
||||||
<refpurpose>Query device information</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>ioctl</function></funcdef>
|
|
||||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>request</parameter></paramdef>
|
|
||||||
<paramdef>struct media_device_info *<parameter>argp</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>fd</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>File descriptor returned by
|
|
||||||
<link linkend='media-func-open'><function>open()</function></link>.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>request</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>MEDIA_IOC_DEVICE_INFO</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>argp</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para></para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
|
|
||||||
<para>All media devices must support the <constant>MEDIA_IOC_DEVICE_INFO</constant>
|
|
||||||
ioctl. To query device information, applications call the ioctl with a
|
|
||||||
pointer to a &media-device-info;. The driver fills the structure and returns
|
|
||||||
the information to the application.
|
|
||||||
The ioctl never fails.</para>
|
|
||||||
|
|
||||||
<table pgwide="1" frame="none" id="media-device-info">
|
|
||||||
<title>struct <structname>media_device_info</structname></title>
|
|
||||||
<tgroup cols="3">
|
|
||||||
&cs-str;
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry>char</entry>
|
|
||||||
<entry><structfield>driver</structfield>[16]</entry>
|
|
||||||
<entry><para>Name of the driver implementing the media API as a
|
|
||||||
NUL-terminated ASCII string. The driver version is stored in the
|
|
||||||
<structfield>driver_version</structfield> field.</para>
|
|
||||||
<para>Driver specific applications can use this information to
|
|
||||||
verify the driver identity. It is also useful to work around
|
|
||||||
known bugs, or to identify drivers in error reports.</para></entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>char</entry>
|
|
||||||
<entry><structfield>model</structfield>[32]</entry>
|
|
||||||
<entry>Device model name as a NUL-terminated UTF-8 string. The
|
|
||||||
device version is stored in the <structfield>device_version</structfield>
|
|
||||||
field and is not be appended to the model name.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>char</entry>
|
|
||||||
<entry><structfield>serial</structfield>[40]</entry>
|
|
||||||
<entry>Serial number as a NUL-terminated ASCII string.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>char</entry>
|
|
||||||
<entry><structfield>bus_info</structfield>[32]</entry>
|
|
||||||
<entry>Location of the device in the system as a NUL-terminated
|
|
||||||
ASCII string. This includes the bus type name (PCI, USB, ...) and a
|
|
||||||
bus-specific identifier.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>media_version</structfield></entry>
|
|
||||||
<entry>Media API version, formatted with the
|
|
||||||
<constant>KERNEL_VERSION()</constant> macro.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>hw_revision</structfield></entry>
|
|
||||||
<entry>Hardware device revision in a driver-specific format.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>driver_version</structfield></entry>
|
|
||||||
<entry>Media device driver version, formatted with the
|
|
||||||
<constant>KERNEL_VERSION()</constant> macro. Together with the
|
|
||||||
<structfield>driver</structfield> field this identifies a particular
|
|
||||||
driver.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>reserved</structfield>[31]</entry>
|
|
||||||
<entry>Reserved for future extensions. Drivers and applications must
|
|
||||||
set this array to zero.</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
<para>The <structfield>serial</structfield> and <structfield>bus_info</structfield>
|
|
||||||
fields can be used to distinguish between multiple instances of otherwise
|
|
||||||
identical hardware. The serial number takes precedence when provided and can
|
|
||||||
be assumed to be unique. If the serial number is an empty string, the
|
|
||||||
<structfield>bus_info</structfield> field can be used instead. The
|
|
||||||
<structfield>bus_info</structfield> field is guaranteed to be unique, but
|
|
||||||
can vary across reboots or device unplug/replug.</para>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
&return-value;
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
@@ -1,180 +0,0 @@
|
|||||||
<refentry id="media-ioc-enum-entities">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>ioctl MEDIA_IOC_ENUM_ENTITIES</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>MEDIA_IOC_ENUM_ENTITIES</refname>
|
|
||||||
<refpurpose>Enumerate entities and their properties</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>ioctl</function></funcdef>
|
|
||||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>request</parameter></paramdef>
|
|
||||||
<paramdef>struct media_entity_desc *<parameter>argp</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>fd</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>File descriptor returned by
|
|
||||||
<link linkend='media-func-open'><function>open()</function></link>.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>request</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>MEDIA_IOC_ENUM_ENTITIES</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>argp</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para></para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
<para>To query the attributes of an entity, applications set the id field
|
|
||||||
of a &media-entity-desc; structure and call the MEDIA_IOC_ENUM_ENTITIES
|
|
||||||
ioctl with a pointer to this structure. The driver fills the rest of the
|
|
||||||
structure or returns an &EINVAL; when the id is invalid.</para>
|
|
||||||
<para>Entities can be enumerated by or'ing the id with the
|
|
||||||
<constant>MEDIA_ENT_ID_FLAG_NEXT</constant> flag. The driver will return
|
|
||||||
information about the entity with the smallest id strictly larger than the
|
|
||||||
requested one ('next entity'), or the &EINVAL; if there is none.</para>
|
|
||||||
<para>Entity IDs can be non-contiguous. Applications must
|
|
||||||
<emphasis>not</emphasis> try to enumerate entities by calling
|
|
||||||
MEDIA_IOC_ENUM_ENTITIES with increasing id's until they get an error.</para>
|
|
||||||
|
|
||||||
<table pgwide="1" frame="none" id="media-entity-desc">
|
|
||||||
<title>struct <structname>media_entity_desc</structname></title>
|
|
||||||
<tgroup cols="5">
|
|
||||||
<colspec colname="c1" />
|
|
||||||
<colspec colname="c2" />
|
|
||||||
<colspec colname="c3" />
|
|
||||||
<colspec colname="c4" />
|
|
||||||
<colspec colname="c5" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>id</structfield></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>Entity id, set by the application. When the id is or'ed with
|
|
||||||
<constant>MEDIA_ENT_ID_FLAG_NEXT</constant>, the driver clears the
|
|
||||||
flag and returns the first entity with a larger id.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>char</entry>
|
|
||||||
<entry><structfield>name</structfield>[32]</entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>Entity name as an UTF-8 NULL-terminated string.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>type</structfield></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>Entity type, see <xref linkend="media-entity-type" /> for details.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>revision</structfield></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>Entity revision. Always zero (obsolete)</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>flags</structfield></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>Entity flags, see <xref linkend="media-entity-flag" /> for details.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>group_id</structfield></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>Entity group ID. Always zero (obsolete)</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u16</entry>
|
|
||||||
<entry><structfield>pads</structfield></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>Number of pads</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u16</entry>
|
|
||||||
<entry><structfield>links</structfield></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>Total number of outbound links. Inbound links are not counted
|
|
||||||
in this field.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>union</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>struct</entry>
|
|
||||||
<entry><structfield>dev</structfield></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>Valid for (sub-)devices that create a single device node.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>major</structfield></entry>
|
|
||||||
<entry>Device node major number.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>minor</structfield></entry>
|
|
||||||
<entry>Device node minor number.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>__u8</entry>
|
|
||||||
<entry><structfield>raw</structfield>[184]</entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry></entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
&return-value;
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EINVAL</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The &media-entity-desc; <structfield>id</structfield> references
|
|
||||||
a non-existing entity.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
@@ -1,160 +0,0 @@
|
|||||||
<refentry id="media-ioc-enum-links">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>ioctl MEDIA_IOC_ENUM_LINKS</refentrytitle>
|
|
||||||
&manvol;
|
|
||||||
</refmeta>
|
|
||||||
|
|
||||||
<refnamediv>
|
|
||||||
<refname>MEDIA_IOC_ENUM_LINKS</refname>
|
|
||||||
<refpurpose>Enumerate all pads and links for a given entity</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
|
|
||||||
<refsynopsisdiv>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>int <function>ioctl</function></funcdef>
|
|
||||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
|
||||||
<paramdef>int <parameter>request</parameter></paramdef>
|
|
||||||
<paramdef>struct media_links_enum *<parameter>argp</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
</refsynopsisdiv>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Arguments</title>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>fd</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>File descriptor returned by
|
|
||||||
<link linkend='media-func-open'><function>open()</function></link>.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>request</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>MEDIA_IOC_ENUM_LINKS</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>argp</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para></para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>Description</title>
|
|
||||||
|
|
||||||
<para>To enumerate pads and/or links for a given entity, applications set
|
|
||||||
the entity field of a &media-links-enum; structure and initialize the
|
|
||||||
&media-pad-desc; and &media-link-desc; structure arrays pointed by the
|
|
||||||
<structfield>pads</structfield> and <structfield>links</structfield> fields.
|
|
||||||
They then call the MEDIA_IOC_ENUM_LINKS ioctl with a pointer to this
|
|
||||||
structure.</para>
|
|
||||||
<para>If the <structfield>pads</structfield> field is not NULL, the driver
|
|
||||||
fills the <structfield>pads</structfield> array with information about the
|
|
||||||
entity's pads. The array must have enough room to store all the entity's
|
|
||||||
pads. The number of pads can be retrieved with the &MEDIA-IOC-ENUM-ENTITIES;
|
|
||||||
ioctl.</para>
|
|
||||||
<para>If the <structfield>links</structfield> field is not NULL, the driver
|
|
||||||
fills the <structfield>links</structfield> array with information about the
|
|
||||||
entity's outbound links. The array must have enough room to store all the
|
|
||||||
entity's outbound links. The number of outbound links can be retrieved with
|
|
||||||
the &MEDIA-IOC-ENUM-ENTITIES; ioctl.</para>
|
|
||||||
<para>Only forward links that originate at one of the entity's source pads
|
|
||||||
are returned during the enumeration process.</para>
|
|
||||||
|
|
||||||
<table pgwide="1" frame="none" id="media-links-enum">
|
|
||||||
<title>struct <structname>media_links_enum</structname></title>
|
|
||||||
<tgroup cols="3">
|
|
||||||
&cs-str;
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>entity</structfield></entry>
|
|
||||||
<entry>Entity id, set by the application.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>&media-pad-desc;</entry>
|
|
||||||
<entry>*<structfield>pads</structfield></entry>
|
|
||||||
<entry>Pointer to a pads array allocated by the application. Ignored
|
|
||||||
if NULL.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>&media-link-desc;</entry>
|
|
||||||
<entry>*<structfield>links</structfield></entry>
|
|
||||||
<entry>Pointer to a links array allocated by the application. Ignored
|
|
||||||
if NULL.</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<table pgwide="1" frame="none" id="media-pad-desc">
|
|
||||||
<title>struct <structname>media_pad_desc</structname></title>
|
|
||||||
<tgroup cols="3">
|
|
||||||
&cs-str;
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>entity</structfield></entry>
|
|
||||||
<entry>ID of the entity this pad belongs to.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u16</entry>
|
|
||||||
<entry><structfield>index</structfield></entry>
|
|
||||||
<entry>0-based pad index.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>flags</structfield></entry>
|
|
||||||
<entry>Pad flags, see <xref linkend="media-pad-flag" /> for more details.</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<table pgwide="1" frame="none" id="media-link-desc">
|
|
||||||
<title>struct <structname>media_link_desc</structname></title>
|
|
||||||
<tgroup cols="3">
|
|
||||||
&cs-str;
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry>&media-pad-desc;</entry>
|
|
||||||
<entry><structfield>source</structfield></entry>
|
|
||||||
<entry>Pad at the origin of this link.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>&media-pad-desc;</entry>
|
|
||||||
<entry><structfield>sink</structfield></entry>
|
|
||||||
<entry>Pad at the target of this link.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>flags</structfield></entry>
|
|
||||||
<entry>Link flags, see <xref linkend="media-link-flag" /> for more details.</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
&return-value;
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><errorcode>EINVAL</errorcode></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The &media-links-enum; <structfield>id</structfield> references
|
|
||||||
a non-existing entity.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
</refsect1>
|
|
||||||
</refentry>
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user