Merge branch 'patchwork' into v4l_for_linus
* patchwork: (496 commits) [media] v4l: tvp5150: Add missing break in set control handler [media] v4l: tvp5150: Don't inline the tvp5150_selmux() function [media] v4l: tvp5150: Compile tvp5150_link_setup out if !CONFIG_MEDIA_CONTROLLER [media] em28xx: don't store usb_device at struct em28xx [media] em28xx: use usb_interface for dev_foo() calls [media] em28xx: don't change the device's name [media] mn88472: fix chip id check on probe [media] mn88473: fix chip id check on probe [media] lirc: fix error paths in lirc_cdev_add() [media] s5p-mfc: Add support for MFC v8 available in Exynos 5433 SoCs [media] s5p-mfc: Rework clock handling [media] s5p-mfc: Don't keep clock prepared all the time [media] s5p-mfc: Kill all IS_ERR_OR_NULL in clocks management code [media] s5p-mfc: Remove dead conditional code [media] s5p-mfc: Ensure that clock is disabled before turning power off [media] s5p-mfc: Remove special clock rate management [media] s5p-mfc: Use printk_ratelimited for reporting ioctl errors [media] s5p-mfc: Set DMA_ATTR_ALLOC_SINGLE_PAGES [media] vivid: Set color_enc on HSV formats [media] v4l2-tpg: Init hv_enc field with a valid value ...
|
@ -3,7 +3,8 @@
|
|||
G-Scaler is used for scaling and color space conversion on EXYNOS5 SoCs.
|
||||
|
||||
Required properties:
|
||||
- compatible: should be "samsung,exynos5-gsc"
|
||||
- compatible: should be "samsung,exynos5-gsc" (for Exynos 5250, 5420 and
|
||||
5422 SoCs) or "samsung,exynos5433-gsc" (Exynos 5433)
|
||||
- reg: should contain G-Scaler physical address location and length.
|
||||
- interrupts: should contain G-Scaler interrupt number
|
||||
|
||||
|
|
|
@ -8,10 +8,11 @@ Required properties:
|
|||
the device. The interrupt specifier format depends on the interrupt
|
||||
controller parent.
|
||||
- clocks: clock phandle and specifier pair.
|
||||
- hisilicon,power-syscon: phandle of syscon used to control power.
|
||||
|
||||
Optional properties:
|
||||
- linux,rc-map-name : Remote control map name.
|
||||
- hisilicon,power-syscon: DEPRECATED. Don't use this in new dts files.
|
||||
Provide correct clocks instead.
|
||||
|
||||
Example node:
|
||||
|
||||
|
@ -19,7 +20,6 @@ Example node:
|
|||
compatible = "hisilicon,hix5hd2-ir";
|
||||
reg = <0xf8001000 0x1000>;
|
||||
interrupts = <0 47 4>;
|
||||
clocks = <&clock HIX5HD2_FIXED_24M>;
|
||||
hisilicon,power-syscon = <&sysctrl>;
|
||||
clocks = <&clock HIX5HD2_IR_CLOCK>;
|
||||
linux,rc-map-name = "rc-tivo";
|
||||
};
|
||||
|
|
|
@ -34,6 +34,7 @@ The digital output port node must contain at least one endpoint.
|
|||
Optional Properties:
|
||||
|
||||
- reset-gpios: Reference to the GPIO connected to the device's reset pin.
|
||||
- default-input: Select which input is selected after reset.
|
||||
|
||||
Optional Endpoint Properties:
|
||||
|
||||
|
@ -47,8 +48,6 @@ Optional Endpoint Properties:
|
|||
If none of hsync-active, vsync-active and pclk-sample is specified the
|
||||
endpoint will use embedded BT.656 synchronization.
|
||||
|
||||
- default-input: Select which input is selected after reset.
|
||||
|
||||
Example:
|
||||
|
||||
hdmi_receiver@4c {
|
||||
|
|
|
@ -0,0 +1,109 @@
|
|||
* Mediatek Media Data Path
|
||||
|
||||
Media Data Path is used for scaling and color space conversion.
|
||||
|
||||
Required properties (controller (parent) node):
|
||||
- compatible: "mediatek,mt8173-mdp"
|
||||
- mediatek,vpu: the node of video processor unit, see
|
||||
Documentation/devicetree/bindings/media/mediatek-vpu.txt for details.
|
||||
|
||||
Required properties (all function blocks, child node):
|
||||
- compatible: Should be one of
|
||||
"mediatek,mt8173-mdp-rdma" - read DMA
|
||||
"mediatek,mt8173-mdp-rsz" - resizer
|
||||
"mediatek,mt8173-mdp-wdma" - write DMA
|
||||
"mediatek,mt8173-mdp-wrot" - write DMA with rotation
|
||||
- reg: Physical base address and length of the function block register space
|
||||
- clocks: device clocks, see
|
||||
Documentation/devicetree/bindings/clock/clock-bindings.txt for details.
|
||||
- power-domains: a phandle to the power domain, see
|
||||
Documentation/devicetree/bindings/power/power_domain.txt for details.
|
||||
|
||||
Required properties (DMA function blocks, child node):
|
||||
- compatible: Should be one of
|
||||
"mediatek,mt8173-mdp-rdma"
|
||||
"mediatek,mt8173-mdp-wdma"
|
||||
"mediatek,mt8173-mdp-wrot"
|
||||
- iommus: should point to the respective IOMMU block with master port as
|
||||
argument, see Documentation/devicetree/bindings/iommu/mediatek,iommu.txt
|
||||
for details.
|
||||
- mediatek,larb: must contain the local arbiters in the current Socs, see
|
||||
Documentation/devicetree/bindings/memory-controllers/mediatek,smi-larb.txt
|
||||
for details.
|
||||
|
||||
Example:
|
||||
mdp {
|
||||
compatible = "mediatek,mt8173-mdp";
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
ranges;
|
||||
mediatek,vpu = <&vpu>;
|
||||
|
||||
mdp_rdma0: rdma@14001000 {
|
||||
compatible = "mediatek,mt8173-mdp-rdma";
|
||||
reg = <0 0x14001000 0 0x1000>;
|
||||
clocks = <&mmsys CLK_MM_MDP_RDMA0>,
|
||||
<&mmsys CLK_MM_MUTEX_32K>;
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
iommus = <&iommu M4U_PORT_MDP_RDMA0>;
|
||||
mediatek,larb = <&larb0>;
|
||||
};
|
||||
|
||||
mdp_rdma1: rdma@14002000 {
|
||||
compatible = "mediatek,mt8173-mdp-rdma";
|
||||
reg = <0 0x14002000 0 0x1000>;
|
||||
clocks = <&mmsys CLK_MM_MDP_RDMA1>,
|
||||
<&mmsys CLK_MM_MUTEX_32K>;
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
iommus = <&iommu M4U_PORT_MDP_RDMA1>;
|
||||
mediatek,larb = <&larb4>;
|
||||
};
|
||||
|
||||
mdp_rsz0: rsz@14003000 {
|
||||
compatible = "mediatek,mt8173-mdp-rsz";
|
||||
reg = <0 0x14003000 0 0x1000>;
|
||||
clocks = <&mmsys CLK_MM_MDP_RSZ0>;
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
};
|
||||
|
||||
mdp_rsz1: rsz@14004000 {
|
||||
compatible = "mediatek,mt8173-mdp-rsz";
|
||||
reg = <0 0x14004000 0 0x1000>;
|
||||
clocks = <&mmsys CLK_MM_MDP_RSZ1>;
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
};
|
||||
|
||||
mdp_rsz2: rsz@14005000 {
|
||||
compatible = "mediatek,mt8173-mdp-rsz";
|
||||
reg = <0 0x14005000 0 0x1000>;
|
||||
clocks = <&mmsys CLK_MM_MDP_RSZ2>;
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
};
|
||||
|
||||
mdp_wdma0: wdma@14006000 {
|
||||
compatible = "mediatek,mt8173-mdp-wdma";
|
||||
reg = <0 0x14006000 0 0x1000>;
|
||||
clocks = <&mmsys CLK_MM_MDP_WDMA>;
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
iommus = <&iommu M4U_PORT_MDP_WDMA>;
|
||||
mediatek,larb = <&larb0>;
|
||||
};
|
||||
|
||||
mdp_wrot0: wrot@14007000 {
|
||||
compatible = "mediatek,mt8173-mdp-wrot";
|
||||
reg = <0 0x14007000 0 0x1000>;
|
||||
clocks = <&mmsys CLK_MM_MDP_WROT0>;
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
iommus = <&iommu M4U_PORT_MDP_WROT0>;
|
||||
mediatek,larb = <&larb0>;
|
||||
};
|
||||
|
||||
mdp_wrot1: wrot@14008000 {
|
||||
compatible = "mediatek,mt8173-mdp-wrot";
|
||||
reg = <0 0x14008000 0 0x1000>;
|
||||
clocks = <&mmsys CLK_MM_MDP_WROT1>;
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
iommus = <&iommu M4U_PORT_MDP_WROT1>;
|
||||
mediatek,larb = <&larb4>;
|
||||
};
|
||||
};
|
|
@ -1,25 +1,74 @@
|
|||
Mediatek Video Codec
|
||||
|
||||
Mediatek Video Codec is the video codec hw present in Mediatek SoCs which
|
||||
supports high resolution encoding functionalities.
|
||||
supports high resolution encoding and decoding functionalities.
|
||||
|
||||
Required properties:
|
||||
- compatible : "mediatek,mt8173-vcodec-enc" for encoder
|
||||
"mediatek,mt8173-vcodec-dec" for decoder.
|
||||
- reg : Physical base address of the video codec registers and length of
|
||||
memory mapped region.
|
||||
- interrupts : interrupt number to the cpu.
|
||||
- mediatek,larb : must contain the local arbiters in the current Socs.
|
||||
- clocks : list of clock specifiers, corresponding to entries in
|
||||
the clock-names property.
|
||||
- clock-names: encoder must contain "venc_sel_src", "venc_sel",
|
||||
- "venc_lt_sel_src", "venc_lt_sel".
|
||||
- clock-names: encoder must contain "venc_sel_src", "venc_sel",,
|
||||
"venc_lt_sel_src", "venc_lt_sel", decoder must contain "vcodecpll",
|
||||
"univpll_d2", "clk_cci400_sel", "vdec_sel", "vdecpll", "vencpll",
|
||||
"venc_lt_sel", "vdec_bus_clk_src".
|
||||
- iommus : should point to the respective IOMMU block with master port as
|
||||
argument, see Documentation/devicetree/bindings/iommu/mediatek,iommu.txt
|
||||
for details.
|
||||
- mediatek,vpu : the node of video processor unit
|
||||
|
||||
|
||||
Example:
|
||||
vcodec_enc: vcodec@0x18002000 {
|
||||
|
||||
vcodec_dec: vcodec@16000000 {
|
||||
compatible = "mediatek,mt8173-vcodec-dec";
|
||||
reg = <0 0x16000000 0 0x100>, /*VDEC_SYS*/
|
||||
<0 0x16020000 0 0x1000>, /*VDEC_MISC*/
|
||||
<0 0x16021000 0 0x800>, /*VDEC_LD*/
|
||||
<0 0x16021800 0 0x800>, /*VDEC_TOP*/
|
||||
<0 0x16022000 0 0x1000>, /*VDEC_CM*/
|
||||
<0 0x16023000 0 0x1000>, /*VDEC_AD*/
|
||||
<0 0x16024000 0 0x1000>, /*VDEC_AV*/
|
||||
<0 0x16025000 0 0x1000>, /*VDEC_PP*/
|
||||
<0 0x16026800 0 0x800>, /*VP8_VD*/
|
||||
<0 0x16027000 0 0x800>, /*VP6_VD*/
|
||||
<0 0x16027800 0 0x800>, /*VP8_VL*/
|
||||
<0 0x16028400 0 0x400>; /*VP9_VD*/
|
||||
interrupts = <GIC_SPI 204 IRQ_TYPE_LEVEL_LOW>;
|
||||
mediatek,larb = <&larb1>;
|
||||
iommus = <&iommu M4U_PORT_HW_VDEC_MC_EXT>,
|
||||
<&iommu M4U_PORT_HW_VDEC_PP_EXT>,
|
||||
<&iommu M4U_PORT_HW_VDEC_AVC_MV_EXT>,
|
||||
<&iommu M4U_PORT_HW_VDEC_PRED_RD_EXT>,
|
||||
<&iommu M4U_PORT_HW_VDEC_PRED_WR_EXT>,
|
||||
<&iommu M4U_PORT_HW_VDEC_UFO_EXT>,
|
||||
<&iommu M4U_PORT_HW_VDEC_VLD_EXT>,
|
||||
<&iommu M4U_PORT_HW_VDEC_VLD2_EXT>;
|
||||
mediatek,vpu = <&vpu>;
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_VDEC>;
|
||||
clocks = <&apmixedsys CLK_APMIXED_VCODECPLL>,
|
||||
<&topckgen CLK_TOP_UNIVPLL_D2>,
|
||||
<&topckgen CLK_TOP_CCI400_SEL>,
|
||||
<&topckgen CLK_TOP_VDEC_SEL>,
|
||||
<&topckgen CLK_TOP_VCODECPLL>,
|
||||
<&apmixedsys CLK_APMIXED_VENCPLL>,
|
||||
<&topckgen CLK_TOP_VENC_LT_SEL>,
|
||||
<&topckgen CLK_TOP_VCODECPLL_370P5>;
|
||||
clock-names = "vcodecpll",
|
||||
"univpll_d2",
|
||||
"clk_cci400_sel",
|
||||
"vdec_sel",
|
||||
"vdecpll",
|
||||
"vencpll",
|
||||
"venc_lt_sel",
|
||||
"vdec_bus_clk_src";
|
||||
};
|
||||
|
||||
vcodec_enc: vcodec@0x18002000 {
|
||||
compatible = "mediatek,mt8173-vcodec-enc";
|
||||
reg = <0 0x18002000 0 0x1000>, /*VENC_SYS*/
|
||||
<0 0x19002000 0 0x1000>; /*VENC_LT_SYS*/
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
Renesas R-Car Fine Display Processor (FDP1)
|
||||
-------------------------------------------
|
||||
|
||||
The FDP1 is a de-interlacing module which converts interlaced video to
|
||||
progressive video. It is capable of performing pixel format conversion between
|
||||
YCbCr/YUV formats and RGB formats. Only YCbCr/YUV formats are supported as
|
||||
an input to the module.
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible: must be "renesas,fdp1"
|
||||
- reg: the register base and size for the device registers
|
||||
- interrupts : interrupt specifier for the FDP1 instance
|
||||
- clocks: reference to the functional clock
|
||||
|
||||
Optional properties:
|
||||
|
||||
- power-domains: reference to the power domain that the FDP1 belongs to, if
|
||||
any.
|
||||
- renesas,fcp: a phandle referencing the FCP that handles memory accesses
|
||||
for the FDP1. Not needed on Gen2, mandatory on Gen3.
|
||||
|
||||
Please refer to the binding documentation for the clock and/or power domain
|
||||
providers for more details.
|
||||
|
||||
|
||||
Device node example
|
||||
-------------------
|
||||
|
||||
fdp1@fe940000 {
|
||||
compatible = "renesas,fdp1";
|
||||
reg = <0 0xfe940000 0 0x2400>;
|
||||
interrupts = <GIC_SPI 262 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_MOD 119>;
|
||||
power-domains = <&sysc R8A7795_PD_A3VP>;
|
||||
renesas,fcp = <&fcpf0>;
|
||||
};
|
|
@ -12,6 +12,7 @@ Required properties:
|
|||
(b) "samsung,mfc-v6" for MFC v6 present in Exynos5 SoCs
|
||||
(c) "samsung,mfc-v7" for MFC v7 present in Exynos5420 SoC
|
||||
(d) "samsung,mfc-v8" for MFC v8 present in Exynos5800 SoC
|
||||
(e) "samsung,exynos5433-mfc" for MFC v8 present in Exynos5433 SoC
|
||||
|
||||
- reg : Physical base address of the IP registers and length of memory
|
||||
mapped region.
|
||||
|
|
|
@ -88,7 +88,7 @@ $(BUILDDIR)/videodev2.h.rst: ${UAPI}/videodev2.h ${PARSER} $(SRC_DIR)/videodev2.
|
|||
$(BUILDDIR)/media.h.rst: ${UAPI}/media.h ${PARSER} $(SRC_DIR)/media.h.rst.exceptions
|
||||
@$($(quiet)gen_rst)
|
||||
|
||||
$(BUILDDIR)/cec.h.rst: ${KAPI}/cec.h ${PARSER} $(SRC_DIR)/cec.h.rst.exceptions
|
||||
$(BUILDDIR)/cec.h.rst: ${UAPI}/cec.h ${PARSER} $(SRC_DIR)/cec.h.rst.exceptions
|
||||
@$($(quiet)gen_rst)
|
||||
|
||||
$(BUILDDIR)/lirc.h.rst: ${UAPI}/lirc.h ${PARSER} $(SRC_DIR)/lirc.h.rst.exceptions
|
||||
|
|
|
@ -37,9 +37,8 @@ The struct cec_adapter represents the CEC adapter hardware. It is created by
|
|||
calling cec_allocate_adapter() and deleted by calling cec_delete_adapter():
|
||||
|
||||
.. c:function::
|
||||
struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops,
|
||||
void *priv, const char *name, u32 caps, u8 available_las,
|
||||
struct device *parent);
|
||||
struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops, void *priv,
|
||||
const char *name, u32 caps, u8 available_las);
|
||||
|
||||
.. c:function::
|
||||
void cec_delete_adapter(struct cec_adapter *adap);
|
||||
|
@ -66,20 +65,19 @@ available_las:
|
|||
the number of simultaneous logical addresses that this
|
||||
adapter can handle. Must be 1 <= available_las <= CEC_MAX_LOG_ADDRS.
|
||||
|
||||
parent:
|
||||
the parent device.
|
||||
|
||||
|
||||
To register the /dev/cecX device node and the remote control device (if
|
||||
CEC_CAP_RC is set) you call:
|
||||
|
||||
.. c:function::
|
||||
int cec_register_adapter(struct cec_adapter \*adap);
|
||||
int cec_register_adapter(struct cec_adapter *adap, struct device *parent);
|
||||
|
||||
where parent is the parent device.
|
||||
|
||||
To unregister the devices call:
|
||||
|
||||
.. c:function::
|
||||
void cec_unregister_adapter(struct cec_adapter \*adap);
|
||||
void cec_unregister_adapter(struct cec_adapter *adap);
|
||||
|
||||
Note: if cec_register_adapter() fails, then call cec_delete_adapter() to
|
||||
clean up. But if cec_register_adapter() succeeded, then only call
|
||||
|
@ -106,13 +104,13 @@ your driver:
|
|||
int (*adap_log_addr)(struct cec_adapter *adap, u8 logical_addr);
|
||||
int (*adap_transmit)(struct cec_adapter *adap, u8 attempts,
|
||||
u32 signal_free_time, struct cec_msg *msg);
|
||||
void (\*adap_log_status)(struct cec_adapter *adap);
|
||||
void (*adap_status)(struct cec_adapter *adap, struct seq_file *file);
|
||||
|
||||
/* High-level callbacks */
|
||||
...
|
||||
};
|
||||
|
||||
The three low-level ops deal with various aspects of controlling the CEC adapter
|
||||
The five low-level ops deal with various aspects of controlling the CEC adapter
|
||||
hardware:
|
||||
|
||||
|
||||
|
@ -238,6 +236,18 @@ When a CEC message was received:
|
|||
|
||||
Speaks for itself.
|
||||
|
||||
Implementing the interrupt handler
|
||||
----------------------------------
|
||||
|
||||
Typically the CEC hardware provides interrupts that signal when a transmit
|
||||
finished and whether it was successful or not, and it provides and interrupt
|
||||
when a CEC message was received.
|
||||
|
||||
The CEC driver should always process the transmit interrupts first before
|
||||
handling the receive interrupt. The framework expects to see the cec_transmit_done
|
||||
call before the cec_received_msg call, otherwise it can get confused if the
|
||||
received message was in reply to the transmitted message.
|
||||
|
||||
Implementing the High-Level CEC Adapter
|
||||
---------------------------------------
|
||||
|
||||
|
@ -247,11 +257,11 @@ CEC protocol driven. The following high-level callbacks are available:
|
|||
.. code-block:: none
|
||||
|
||||
struct cec_adap_ops {
|
||||
/\* Low-level callbacks \*/
|
||||
/* Low-level callbacks */
|
||||
...
|
||||
|
||||
/\* High-level CEC message callback \*/
|
||||
int (\*received)(struct cec_adapter \*adap, struct cec_msg \*msg);
|
||||
/* High-level CEC message callback */
|
||||
int (*received)(struct cec_adapter *adap, struct cec_msg *msg);
|
||||
};
|
||||
|
||||
The received() callback allows the driver to optionally handle a newly
|
||||
|
@ -263,7 +273,7 @@ received CEC message
|
|||
If the driver wants to process a CEC message, then it can implement this
|
||||
callback. If it doesn't want to handle this message, then it should return
|
||||
-ENOMSG, otherwise the CEC framework assumes it processed this message and
|
||||
it will not no anything with it.
|
||||
it will not do anything with it.
|
||||
|
||||
|
||||
CEC framework functions
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
MIPI CSI-2
|
||||
==========
|
||||
|
||||
CSI-2 is a data bus intended for transferring images from cameras to
|
||||
the host SoC. It is defined by the `MIPI alliance`_.
|
||||
|
||||
.. _`MIPI alliance`: http://www.mipi.org/
|
||||
|
||||
Transmitter drivers
|
||||
-------------------
|
||||
|
||||
CSI-2 transmitter, such as a sensor or a TV tuner, drivers need to
|
||||
provide the CSI-2 receiver with information on the CSI-2 bus
|
||||
configuration. These include the V4L2_CID_LINK_FREQ and
|
||||
V4L2_CID_PIXEL_RATE controls and
|
||||
(:c:type:`v4l2_subdev_video_ops`->s_stream() callback). These
|
||||
interface elements must be present on the sub-device represents the
|
||||
CSI-2 transmitter.
|
||||
|
||||
The V4L2_CID_LINK_FREQ control is used to tell the receiver driver the
|
||||
frequency (and not the symbol rate) of the link. The
|
||||
V4L2_CID_PIXEL_RATE is may be used by the receiver to obtain the pixel
|
||||
rate the transmitter uses. The
|
||||
:c:type:`v4l2_subdev_video_ops`->s_stream() callback provides an
|
||||
ability to start and stop the stream.
|
||||
|
||||
The value of the V4L2_CID_PIXEL_RATE is calculated as follows::
|
||||
|
||||
pixel_rate = link_freq * 2 * nr_of_lanes / bits_per_sample
|
||||
|
||||
where
|
||||
|
||||
.. list-table:: variables in pixel rate calculation
|
||||
:header-rows: 1
|
||||
|
||||
* - variable or constant
|
||||
- description
|
||||
* - link_freq
|
||||
- The value of the V4L2_CID_LINK_FREQ integer64 menu item.
|
||||
* - nr_of_lanes
|
||||
- Number of data lanes used on the CSI-2 link. This can
|
||||
be obtained from the OF endpoint configuration.
|
||||
* - 2
|
||||
- Two bits are transferred per clock cycle per lane.
|
||||
* - bits_per_sample
|
||||
- Number of bits per sample.
|
||||
|
||||
The transmitter drivers must configure the CSI-2 transmitter to *LP-11
|
||||
mode* whenever the transmitter is powered on but not active. Some
|
||||
transmitters do this automatically but some have to be explicitly
|
||||
programmed to do so.
|
||||
|
||||
Receiver drivers
|
||||
----------------
|
||||
|
||||
Before the receiver driver may enable the CSI-2 transmitter by using
|
||||
the :c:type:`v4l2_subdev_video_ops`->s_stream(), it must have powered
|
||||
the transmitter up by using the
|
||||
:c:type:`v4l2_subdev_core_ops`->s_power() callback. This may take
|
||||
place either indirectly by using :c:func:`v4l2_pipeline_pm_use` or
|
||||
directly.
|
|
@ -8,14 +8,6 @@ Digital TV Common functions
|
|||
|
||||
.. kernel-doc:: drivers/media/dvb-core/dvbdev.h
|
||||
|
||||
|
||||
|
||||
.. kernel-doc:: drivers/media/dvb-core/dvb_math.h
|
||||
:export: drivers/media/dvb-core/dvb_math.c
|
||||
|
||||
.. kernel-doc:: drivers/media/dvb-core/dvbdev.h
|
||||
:export: drivers/media/dvb-core/dvbdev.c
|
||||
|
||||
Digital TV Ring buffer
|
||||
----------------------
|
||||
|
||||
|
|
|
@ -33,3 +33,4 @@ For more details see the file COPYING in the source distribution of Linux.
|
|||
kapi/rc-core
|
||||
kapi/mc-core
|
||||
kapi/cec-core
|
||||
kapi/csi2
|
||||
|
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 119 KiB |
|
@ -48,41 +48,21 @@ returns the information to the application. The ioctl never fails.
|
|||
:stub-columns: 0
|
||||
:widths: 1 1 16
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- char
|
||||
|
||||
- ``driver[32]``
|
||||
|
||||
- The name of the cec adapter driver.
|
||||
|
||||
- .. row 2
|
||||
|
||||
- char
|
||||
|
||||
- ``name[32]``
|
||||
|
||||
- The name of this CEC adapter. The combination ``driver`` and
|
||||
``name`` must be unique.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- __u32
|
||||
|
||||
- ``capabilities``
|
||||
|
||||
- The capabilities of the CEC adapter, see
|
||||
:ref:`cec-capabilities`.
|
||||
|
||||
- .. row 4
|
||||
|
||||
- __u32
|
||||
|
||||
- ``version``
|
||||
|
||||
- CEC Framework API version, formatted with the ``KERNEL_VERSION()``
|
||||
macro.
|
||||
* - char
|
||||
- ``driver[32]``
|
||||
- The name of the cec adapter driver.
|
||||
* - char
|
||||
- ``name[32]``
|
||||
- The name of this CEC adapter. The combination ``driver`` and
|
||||
``name`` must be unique.
|
||||
* - __u32
|
||||
- ``capabilities``
|
||||
- The capabilities of the CEC adapter, see
|
||||
:ref:`cec-capabilities`.
|
||||
* - __u32
|
||||
- ``version``
|
||||
- CEC Framework API version, formatted with the ``KERNEL_VERSION()``
|
||||
macro.
|
||||
|
||||
|
||||
.. tabularcolumns:: |p{4.4cm}|p{2.5cm}|p{10.6cm}|
|
||||
|
@ -94,68 +74,50 @@ returns the information to the application. The ioctl never fails.
|
|||
:stub-columns: 0
|
||||
:widths: 3 1 8
|
||||
|
||||
* .. _`CEC-CAP-PHYS-ADDR`:
|
||||
|
||||
- .. _`CEC-CAP-PHYS-ADDR`:
|
||||
- ``CEC_CAP_PHYS_ADDR``
|
||||
- 0x00000001
|
||||
- Userspace has to configure the physical address by calling
|
||||
:ref:`ioctl CEC_ADAP_S_PHYS_ADDR <CEC_ADAP_S_PHYS_ADDR>`. If
|
||||
this capability isn't set, then setting the physical address is
|
||||
handled by the kernel whenever the EDID is set (for an HDMI
|
||||
receiver) or read (for an HDMI transmitter).
|
||||
* .. _`CEC-CAP-LOG-ADDRS`:
|
||||
|
||||
- ``CEC_CAP_PHYS_ADDR``
|
||||
- ``CEC_CAP_LOG_ADDRS``
|
||||
- 0x00000002
|
||||
- Userspace has to configure the logical addresses by calling
|
||||
:ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`. If
|
||||
this capability isn't set, then the kernel will have configured
|
||||
this.
|
||||
* .. _`CEC-CAP-TRANSMIT`:
|
||||
|
||||
- 0x00000001
|
||||
- ``CEC_CAP_TRANSMIT``
|
||||
- 0x00000004
|
||||
- Userspace can transmit CEC messages by calling
|
||||
:ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>`. This implies that
|
||||
userspace can be a follower as well, since being able to transmit
|
||||
messages is a prerequisite of becoming a follower. If this
|
||||
capability isn't set, then the kernel will handle all CEC
|
||||
transmits and process all CEC messages it receives.
|
||||
* .. _`CEC-CAP-PASSTHROUGH`:
|
||||
|
||||
- Userspace has to configure the physical address by calling
|
||||
:ref:`ioctl CEC_ADAP_S_PHYS_ADDR <CEC_ADAP_S_PHYS_ADDR>`. If
|
||||
this capability isn't set, then setting the physical address is
|
||||
handled by the kernel whenever the EDID is set (for an HDMI
|
||||
receiver) or read (for an HDMI transmitter).
|
||||
- ``CEC_CAP_PASSTHROUGH``
|
||||
- 0x00000008
|
||||
- Userspace can use the passthrough mode by calling
|
||||
:ref:`ioctl CEC_S_MODE <CEC_S_MODE>`.
|
||||
* .. _`CEC-CAP-RC`:
|
||||
|
||||
- .. _`CEC-CAP-LOG-ADDRS`:
|
||||
- ``CEC_CAP_RC``
|
||||
- 0x00000010
|
||||
- This adapter supports the remote control protocol.
|
||||
* .. _`CEC-CAP-MONITOR-ALL`:
|
||||
|
||||
- ``CEC_CAP_LOG_ADDRS``
|
||||
|
||||
- 0x00000002
|
||||
|
||||
- Userspace has to configure the logical addresses by calling
|
||||
:ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`. If
|
||||
this capability isn't set, then the kernel will have configured
|
||||
this.
|
||||
|
||||
- .. _`CEC-CAP-TRANSMIT`:
|
||||
|
||||
- ``CEC_CAP_TRANSMIT``
|
||||
|
||||
- 0x00000004
|
||||
|
||||
- Userspace can transmit CEC messages by calling
|
||||
:ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>`. This implies that
|
||||
userspace can be a follower as well, since being able to transmit
|
||||
messages is a prerequisite of becoming a follower. If this
|
||||
capability isn't set, then the kernel will handle all CEC
|
||||
transmits and process all CEC messages it receives.
|
||||
|
||||
- .. _`CEC-CAP-PASSTHROUGH`:
|
||||
|
||||
- ``CEC_CAP_PASSTHROUGH``
|
||||
|
||||
- 0x00000008
|
||||
|
||||
- Userspace can use the passthrough mode by calling
|
||||
:ref:`ioctl CEC_S_MODE <CEC_S_MODE>`.
|
||||
|
||||
- .. _`CEC-CAP-RC`:
|
||||
|
||||
- ``CEC_CAP_RC``
|
||||
|
||||
- 0x00000010
|
||||
|
||||
- This adapter supports the remote control protocol.
|
||||
|
||||
- .. _`CEC-CAP-MONITOR-ALL`:
|
||||
|
||||
- ``CEC_CAP_MONITOR_ALL``
|
||||
|
||||
- 0x00000020
|
||||
|
||||
- The CEC hardware can monitor all messages, not just directed and
|
||||
broadcast messages.
|
||||
- ``CEC_CAP_MONITOR_ALL``
|
||||
- 0x00000020
|
||||
- The CEC hardware can monitor all messages, not just directed and
|
||||
broadcast messages.
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -77,134 +77,79 @@ logical address types are already defined will return with error ``EBUSY``.
|
|||
:stub-columns: 0
|
||||
:widths: 1 1 16
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- __u8
|
||||
|
||||
- ``log_addr[CEC_MAX_LOG_ADDRS]``
|
||||
|
||||
- The actual logical addresses that were claimed. This is set by the
|
||||
driver. If no logical address could be claimed, then it is set to
|
||||
``CEC_LOG_ADDR_INVALID``. If this adapter is Unregistered, then
|
||||
``log_addr[0]`` is set to 0xf and all others to
|
||||
``CEC_LOG_ADDR_INVALID``.
|
||||
|
||||
- .. row 2
|
||||
|
||||
- __u16
|
||||
|
||||
- ``log_addr_mask``
|
||||
|
||||
- The bitmask of all logical addresses this adapter has claimed. If
|
||||
this adapter is Unregistered then ``log_addr_mask`` sets bit 15
|
||||
and clears all other bits. If this adapter is not configured at
|
||||
all, then ``log_addr_mask`` is set to 0. Set by the driver.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- __u8
|
||||
|
||||
- ``cec_version``
|
||||
|
||||
- The CEC version that this adapter shall use. See
|
||||
:ref:`cec-versions`. Used to implement the
|
||||
``CEC_MSG_CEC_VERSION`` and ``CEC_MSG_REPORT_FEATURES`` messages.
|
||||
Note that :ref:`CEC_OP_CEC_VERSION_1_3A <CEC-OP-CEC-VERSION-1-3A>` is not allowed by the CEC
|
||||
framework.
|
||||
|
||||
- .. row 4
|
||||
|
||||
- __u8
|
||||
|
||||
- ``num_log_addrs``
|
||||
|
||||
- Number of logical addresses to set up. Must be ≤
|
||||
``available_log_addrs`` as returned by
|
||||
:ref:`CEC_ADAP_G_CAPS`. All arrays in
|
||||
this structure are only filled up to index
|
||||
``available_log_addrs``-1. The remaining array elements will be
|
||||
ignored. Note that the CEC 2.0 standard allows for a maximum of 2
|
||||
logical addresses, although some hardware has support for more.
|
||||
``CEC_MAX_LOG_ADDRS`` is 4. The driver will return the actual
|
||||
number of logical addresses it could claim, which may be less than
|
||||
what was requested. If this field is set to 0, then the CEC
|
||||
adapter shall clear all claimed logical addresses and all other
|
||||
fields will be ignored.
|
||||
|
||||
- .. row 5
|
||||
|
||||
- __u32
|
||||
|
||||
- ``vendor_id``
|
||||
|
||||
- The vendor ID is a 24-bit number that identifies the specific
|
||||
vendor or entity. Based on this ID vendor specific commands may be
|
||||
defined. If you do not want a vendor ID then set it to
|
||||
``CEC_VENDOR_ID_NONE``.
|
||||
|
||||
- .. row 6
|
||||
|
||||
- __u32
|
||||
|
||||
- ``flags``
|
||||
|
||||
- Flags. See :ref:`cec-log-addrs-flags` for a list of available flags.
|
||||
|
||||
- .. row 7
|
||||
|
||||
- char
|
||||
|
||||
- ``osd_name[15]``
|
||||
|
||||
- The On-Screen Display name as is returned by the
|
||||
``CEC_MSG_SET_OSD_NAME`` message.
|
||||
|
||||
- .. row 8
|
||||
|
||||
- __u8
|
||||
|
||||
- ``primary_device_type[CEC_MAX_LOG_ADDRS]``
|
||||
|
||||
- Primary device type for each logical address. See
|
||||
:ref:`cec-prim-dev-types` for possible types.
|
||||
|
||||
- .. row 9
|
||||
|
||||
- __u8
|
||||
|
||||
- ``log_addr_type[CEC_MAX_LOG_ADDRS]``
|
||||
|
||||
- Logical address types. See :ref:`cec-log-addr-types` for
|
||||
possible types. The driver will update this with the actual
|
||||
logical address type that it claimed (e.g. it may have to fallback
|
||||
to :ref:`CEC_LOG_ADDR_TYPE_UNREGISTERED <CEC-LOG-ADDR-TYPE-UNREGISTERED>`).
|
||||
|
||||
- .. row 10
|
||||
|
||||
- __u8
|
||||
|
||||
- ``all_device_types[CEC_MAX_LOG_ADDRS]``
|
||||
|
||||
- CEC 2.0 specific: the bit mask of all device types. See
|
||||
:ref:`cec-all-dev-types-flags`. It is used in the CEC 2.0
|
||||
``CEC_MSG_REPORT_FEATURES`` message. For CEC 1.4 you can either leave
|
||||
this field to 0, or fill it in according to the CEC 2.0 guidelines to
|
||||
give the CEC framework more information about the device type, even
|
||||
though the framework won't use it directly in the CEC message.
|
||||
|
||||
- .. row 11
|
||||
|
||||
- __u8
|
||||
|
||||
- ``features[CEC_MAX_LOG_ADDRS][12]``
|
||||
|
||||
- Features for each logical address. It is used in the CEC 2.0
|
||||
``CEC_MSG_REPORT_FEATURES`` message. The 12 bytes include both the
|
||||
RC Profile and the Device Features. For CEC 1.4 you can either leave
|
||||
this field to all 0, or fill it in according to the CEC 2.0 guidelines to
|
||||
give the CEC framework more information about the device type, even
|
||||
though the framework won't use it directly in the CEC message.
|
||||
* - __u8
|
||||
- ``log_addr[CEC_MAX_LOG_ADDRS]``
|
||||
- The actual logical addresses that were claimed. This is set by the
|
||||
driver. If no logical address could be claimed, then it is set to
|
||||
``CEC_LOG_ADDR_INVALID``. If this adapter is Unregistered, then
|
||||
``log_addr[0]`` is set to 0xf and all others to
|
||||
``CEC_LOG_ADDR_INVALID``.
|
||||
* - __u16
|
||||
- ``log_addr_mask``
|
||||
- The bitmask of all logical addresses this adapter has claimed. If
|
||||
this adapter is Unregistered then ``log_addr_mask`` sets bit 15
|
||||
and clears all other bits. If this adapter is not configured at
|
||||
all, then ``log_addr_mask`` is set to 0. Set by the driver.
|
||||
* - __u8
|
||||
- ``cec_version``
|
||||
- The CEC version that this adapter shall use. See
|
||||
:ref:`cec-versions`. Used to implement the
|
||||
``CEC_MSG_CEC_VERSION`` and ``CEC_MSG_REPORT_FEATURES`` messages.
|
||||
Note that :ref:`CEC_OP_CEC_VERSION_1_3A <CEC-OP-CEC-VERSION-1-3A>` is not allowed by the CEC
|
||||
framework.
|
||||
* - __u8
|
||||
- ``num_log_addrs``
|
||||
- Number of logical addresses to set up. Must be ≤
|
||||
``available_log_addrs`` as returned by
|
||||
:ref:`CEC_ADAP_G_CAPS`. All arrays in
|
||||
this structure are only filled up to index
|
||||
``available_log_addrs``-1. The remaining array elements will be
|
||||
ignored. Note that the CEC 2.0 standard allows for a maximum of 2
|
||||
logical addresses, although some hardware has support for more.
|
||||
``CEC_MAX_LOG_ADDRS`` is 4. The driver will return the actual
|
||||
number of logical addresses it could claim, which may be less than
|
||||
what was requested. If this field is set to 0, then the CEC
|
||||
adapter shall clear all claimed logical addresses and all other
|
||||
fields will be ignored.
|
||||
* - __u32
|
||||
- ``vendor_id``
|
||||
- The vendor ID is a 24-bit number that identifies the specific
|
||||
vendor or entity. Based on this ID vendor specific commands may be
|
||||
defined. If you do not want a vendor ID then set it to
|
||||
``CEC_VENDOR_ID_NONE``.
|
||||
* - __u32
|
||||
- ``flags``
|
||||
- Flags. See :ref:`cec-log-addrs-flags` for a list of available flags.
|
||||
* - char
|
||||
- ``osd_name[15]``
|
||||
- The On-Screen Display name as is returned by the
|
||||
``CEC_MSG_SET_OSD_NAME`` message.
|
||||
* - __u8
|
||||
- ``primary_device_type[CEC_MAX_LOG_ADDRS]``
|
||||
- Primary device type for each logical address. See
|
||||
:ref:`cec-prim-dev-types` for possible types.
|
||||
* - __u8
|
||||
- ``log_addr_type[CEC_MAX_LOG_ADDRS]``
|
||||
- Logical address types. See :ref:`cec-log-addr-types` for
|
||||
possible types. The driver will update this with the actual
|
||||
logical address type that it claimed (e.g. it may have to fallback
|
||||
to :ref:`CEC_LOG_ADDR_TYPE_UNREGISTERED <CEC-LOG-ADDR-TYPE-UNREGISTERED>`).
|
||||
* - __u8
|
||||
- ``all_device_types[CEC_MAX_LOG_ADDRS]``
|
||||
- CEC 2.0 specific: the bit mask of all device types. See
|
||||
:ref:`cec-all-dev-types-flags`. It is used in the CEC 2.0
|
||||
``CEC_MSG_REPORT_FEATURES`` message. For CEC 1.4 you can either leave
|
||||
this field to 0, or fill it in according to the CEC 2.0 guidelines to
|
||||
give the CEC framework more information about the device type, even
|
||||
though the framework won't use it directly in the CEC message.
|
||||
* - __u8
|
||||
- ``features[CEC_MAX_LOG_ADDRS][12]``
|
||||
- Features for each logical address. It is used in the CEC 2.0
|
||||
``CEC_MSG_REPORT_FEATURES`` message. The 12 bytes include both the
|
||||
RC Profile and the Device Features. For CEC 1.4 you can either leave
|
||||
this field to all 0, or fill it in according to the CEC 2.0 guidelines to
|
||||
give the CEC framework more information about the device type, even
|
||||
though the framework won't use it directly in the CEC message.
|
||||
|
||||
.. _cec-log-addrs-flags:
|
||||
|
||||
|
@ -213,17 +158,33 @@ logical address types are already defined will return with error ``EBUSY``.
|
|||
:stub-columns: 0
|
||||
:widths: 3 1 4
|
||||
|
||||
* .. _`CEC-LOG-ADDRS-FL-ALLOW-UNREG-FALLBACK`:
|
||||
|
||||
- .. _`CEC-LOG-ADDRS-FL-ALLOW-UNREG-FALLBACK`:
|
||||
- ``CEC_LOG_ADDRS_FL_ALLOW_UNREG_FALLBACK``
|
||||
- 1
|
||||
- By default if no logical address of the requested type can be claimed, then
|
||||
it will go back to the unconfigured state. If this flag is set, then it will
|
||||
fallback to the Unregistered logical address. Note that if the Unregistered
|
||||
logical address was explicitly requested, then this flag has no effect.
|
||||
* .. _`CEC-LOG-ADDRS-FL-ALLOW-RC-PASSTHRU`:
|
||||
|
||||
- ``CEC_LOG_ADDRS_FL_ALLOW_UNREG_FALLBACK``
|
||||
- ``CEC_LOG_ADDRS_FL_ALLOW_RC_PASSTHRU``
|
||||
- 2
|
||||
- By default the ``CEC_MSG_USER_CONTROL_PRESSED`` and ``CEC_MSG_USER_CONTROL_RELEASED``
|
||||
messages are only passed on to the follower(s), if any. If this flag is set,
|
||||
then these messages are also passed on to the remote control input subsystem
|
||||
and will appear as keystrokes. This features needs to be enabled explicitly.
|
||||
If CEC is used to enter e.g. passwords, then you may not want to enable this
|
||||
to avoid trivial snooping of the keystrokes.
|
||||
* .. _`CEC-LOG-ADDRS-FL-CDC-ONLY`:
|
||||
|
||||
- 1
|
||||
- `CEC_LOG_ADDRS_FL_CDC_ONLY`
|
||||
- 4
|
||||
- If this flag is set, then the device is CDC-Only. CDC-Only CEC devices
|
||||
are CEC devices that can only handle CDC messages.
|
||||
|
||||
All other messages are ignored.
|
||||
|
||||
- By default if no logical address of the requested type can be claimed, then
|
||||
it will go back to the unconfigured state. If this flag is set, then it will
|
||||
fallback to the Unregistered logical address. Note that if the Unregistered
|
||||
logical address was explicitly requested, then this flag has no effect.
|
||||
|
||||
.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}|
|
||||
|
||||
|
@ -234,30 +195,21 @@ logical address types are already defined will return with error ``EBUSY``.
|
|||
:stub-columns: 0
|
||||
:widths: 3 1 4
|
||||
|
||||
* .. _`CEC-OP-CEC-VERSION-1-3A`:
|
||||
|
||||
- .. _`CEC-OP-CEC-VERSION-1-3A`:
|
||||
- ``CEC_OP_CEC_VERSION_1_3A``
|
||||
- 4
|
||||
- CEC version according to the HDMI 1.3a standard.
|
||||
* .. _`CEC-OP-CEC-VERSION-1-4B`:
|
||||
|
||||
- ``CEC_OP_CEC_VERSION_1_3A``
|
||||
- ``CEC_OP_CEC_VERSION_1_4B``
|
||||
- 5
|
||||
- CEC version according to the HDMI 1.4b standard.
|
||||
* .. _`CEC-OP-CEC-VERSION-2-0`:
|
||||
|
||||
- 4
|
||||
|
||||
- CEC version according to the HDMI 1.3a standard.
|
||||
|
||||
- .. _`CEC-OP-CEC-VERSION-1-4B`:
|
||||
|
||||
- ``CEC_OP_CEC_VERSION_1_4B``
|
||||
|
||||
- 5
|
||||
|
||||
- CEC version according to the HDMI 1.4b standard.
|
||||
|
||||
- .. _`CEC-OP-CEC-VERSION-2-0`:
|
||||
|
||||
- ``CEC_OP_CEC_VERSION_2_0``
|
||||
|
||||
- 6
|
||||
|
||||
- CEC version according to the HDMI 2.0 standard.
|
||||
- ``CEC_OP_CEC_VERSION_2_0``
|
||||
- 6
|
||||
- CEC version according to the HDMI 2.0 standard.
|
||||
|
||||
|
||||
.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}|
|
||||
|
@ -269,62 +221,41 @@ logical address types are already defined will return with error ``EBUSY``.
|
|||
:stub-columns: 0
|
||||
:widths: 3 1 4
|
||||
|
||||
* .. _`CEC-OP-PRIM-DEVTYPE-TV`:
|
||||
|
||||
- .. _`CEC-OP-PRIM-DEVTYPE-TV`:
|
||||
- ``CEC_OP_PRIM_DEVTYPE_TV``
|
||||
- 0
|
||||
- Use for a TV.
|
||||
* .. _`CEC-OP-PRIM-DEVTYPE-RECORD`:
|
||||
|
||||
- ``CEC_OP_PRIM_DEVTYPE_TV``
|
||||
- ``CEC_OP_PRIM_DEVTYPE_RECORD``
|
||||
- 1
|
||||
- Use for a recording device.
|
||||
* .. _`CEC-OP-PRIM-DEVTYPE-TUNER`:
|
||||
|
||||
- 0
|
||||
- ``CEC_OP_PRIM_DEVTYPE_TUNER``
|
||||
- 3
|
||||
- Use for a device with a tuner.
|
||||
* .. _`CEC-OP-PRIM-DEVTYPE-PLAYBACK`:
|
||||
|
||||
- Use for a TV.
|
||||
- ``CEC_OP_PRIM_DEVTYPE_PLAYBACK``
|
||||
- 4
|
||||
- Use for a playback device.
|
||||
* .. _`CEC-OP-PRIM-DEVTYPE-AUDIOSYSTEM`:
|
||||
|
||||
- .. _`CEC-OP-PRIM-DEVTYPE-RECORD`:
|
||||
- ``CEC_OP_PRIM_DEVTYPE_AUDIOSYSTEM``
|
||||
- 5
|
||||
- Use for an audio system (e.g. an audio/video receiver).
|
||||
* .. _`CEC-OP-PRIM-DEVTYPE-SWITCH`:
|
||||
|
||||
- ``CEC_OP_PRIM_DEVTYPE_RECORD``
|
||||
- ``CEC_OP_PRIM_DEVTYPE_SWITCH``
|
||||
- 6
|
||||
- Use for a CEC switch.
|
||||
* .. _`CEC-OP-PRIM-DEVTYPE-VIDEOPROC`:
|
||||
|
||||
- 1
|
||||
|
||||
- Use for a recording device.
|
||||
|
||||
- .. _`CEC-OP-PRIM-DEVTYPE-TUNER`:
|
||||
|
||||
- ``CEC_OP_PRIM_DEVTYPE_TUNER``
|
||||
|
||||
- 3
|
||||
|
||||
- Use for a device with a tuner.
|
||||
|
||||
- .. _`CEC-OP-PRIM-DEVTYPE-PLAYBACK`:
|
||||
|
||||
- ``CEC_OP_PRIM_DEVTYPE_PLAYBACK``
|
||||
|
||||
- 4
|
||||
|
||||
- Use for a playback device.
|
||||
|
||||
- .. _`CEC-OP-PRIM-DEVTYPE-AUDIOSYSTEM`:
|
||||
|
||||
- ``CEC_OP_PRIM_DEVTYPE_AUDIOSYSTEM``
|
||||
|
||||
- 5
|
||||
|
||||
- Use for an audio system (e.g. an audio/video receiver).
|
||||
|
||||
- .. _`CEC-OP-PRIM-DEVTYPE-SWITCH`:
|
||||
|
||||
- ``CEC_OP_PRIM_DEVTYPE_SWITCH``
|
||||
|
||||
- 6
|
||||
|
||||
- Use for a CEC switch.
|
||||
|
||||
- .. _`CEC-OP-PRIM-DEVTYPE-VIDEOPROC`:
|
||||
|
||||
- ``CEC_OP_PRIM_DEVTYPE_VIDEOPROC``
|
||||
|
||||
- 7
|
||||
|
||||
- Use for a video processor device.
|
||||
- ``CEC_OP_PRIM_DEVTYPE_VIDEOPROC``
|
||||
- 7
|
||||
- Use for a video processor device.
|
||||
|
||||
|
||||
.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}|
|
||||
|
@ -336,64 +267,43 @@ logical address types are already defined will return with error ``EBUSY``.
|
|||
:stub-columns: 0
|
||||
:widths: 3 1 16
|
||||
|
||||
* .. _`CEC-LOG-ADDR-TYPE-TV`:
|
||||
|
||||
- .. _`CEC-LOG-ADDR-TYPE-TV`:
|
||||
- ``CEC_LOG_ADDR_TYPE_TV``
|
||||
- 0
|
||||
- Use for a TV.
|
||||
* .. _`CEC-LOG-ADDR-TYPE-RECORD`:
|
||||
|
||||
- ``CEC_LOG_ADDR_TYPE_TV``
|
||||
- ``CEC_LOG_ADDR_TYPE_RECORD``
|
||||
- 1
|
||||
- Use for a recording device.
|
||||
* .. _`CEC-LOG-ADDR-TYPE-TUNER`:
|
||||
|
||||
- 0
|
||||
- ``CEC_LOG_ADDR_TYPE_TUNER``
|
||||
- 2
|
||||
- Use for a tuner device.
|
||||
* .. _`CEC-LOG-ADDR-TYPE-PLAYBACK`:
|
||||
|
||||
- Use for a TV.
|
||||
- ``CEC_LOG_ADDR_TYPE_PLAYBACK``
|
||||
- 3
|
||||
- Use for a playback device.
|
||||
* .. _`CEC-LOG-ADDR-TYPE-AUDIOSYSTEM`:
|
||||
|
||||
- .. _`CEC-LOG-ADDR-TYPE-RECORD`:
|
||||
- ``CEC_LOG_ADDR_TYPE_AUDIOSYSTEM``
|
||||
- 4
|
||||
- Use for an audio system device.
|
||||
* .. _`CEC-LOG-ADDR-TYPE-SPECIFIC`:
|
||||
|
||||
- ``CEC_LOG_ADDR_TYPE_RECORD``
|
||||
- ``CEC_LOG_ADDR_TYPE_SPECIFIC``
|
||||
- 5
|
||||
- Use for a second TV or for a video processor device.
|
||||
* .. _`CEC-LOG-ADDR-TYPE-UNREGISTERED`:
|
||||
|
||||
- 1
|
||||
|
||||
- Use for a recording device.
|
||||
|
||||
- .. _`CEC-LOG-ADDR-TYPE-TUNER`:
|
||||
|
||||
- ``CEC_LOG_ADDR_TYPE_TUNER``
|
||||
|
||||
- 2
|
||||
|
||||
- Use for a tuner device.
|
||||
|
||||
- .. _`CEC-LOG-ADDR-TYPE-PLAYBACK`:
|
||||
|
||||
- ``CEC_LOG_ADDR_TYPE_PLAYBACK``
|
||||
|
||||
- 3
|
||||
|
||||
- Use for a playback device.
|
||||
|
||||
- .. _`CEC-LOG-ADDR-TYPE-AUDIOSYSTEM`:
|
||||
|
||||
- ``CEC_LOG_ADDR_TYPE_AUDIOSYSTEM``
|
||||
|
||||
- 4
|
||||
|
||||
- Use for an audio system device.
|
||||
|
||||
- .. _`CEC-LOG-ADDR-TYPE-SPECIFIC`:
|
||||
|
||||
- ``CEC_LOG_ADDR_TYPE_SPECIFIC``
|
||||
|
||||
- 5
|
||||
|
||||
- Use for a second TV or for a video processor device.
|
||||
|
||||
- .. _`CEC-LOG-ADDR-TYPE-UNREGISTERED`:
|
||||
|
||||
- ``CEC_LOG_ADDR_TYPE_UNREGISTERED``
|
||||
|
||||
- 6
|
||||
|
||||
- Use this if you just want to remain unregistered. Used for pure
|
||||
CEC switches or CDC-only devices (CDC: Capability Discovery and
|
||||
Control).
|
||||
- ``CEC_LOG_ADDR_TYPE_UNREGISTERED``
|
||||
- 6
|
||||
- Use this if you just want to remain unregistered. Used for pure
|
||||
CEC switches or CDC-only devices (CDC: Capability Discovery and
|
||||
Control).
|
||||
|
||||
|
||||
|
||||
|
@ -406,54 +316,36 @@ logical address types are already defined will return with error ``EBUSY``.
|
|||
:stub-columns: 0
|
||||
:widths: 3 1 4
|
||||
|
||||
* .. _`CEC-OP-ALL-DEVTYPE-TV`:
|
||||
|
||||
- .. _`CEC-OP-ALL-DEVTYPE-TV`:
|
||||
- ``CEC_OP_ALL_DEVTYPE_TV``
|
||||
- 0x80
|
||||
- This supports the TV type.
|
||||
* .. _`CEC-OP-ALL-DEVTYPE-RECORD`:
|
||||
|
||||
- ``CEC_OP_ALL_DEVTYPE_TV``
|
||||
- ``CEC_OP_ALL_DEVTYPE_RECORD``
|
||||
- 0x40
|
||||
- This supports the Recording type.
|
||||
* .. _`CEC-OP-ALL-DEVTYPE-TUNER`:
|
||||
|
||||
- 0x80
|
||||
- ``CEC_OP_ALL_DEVTYPE_TUNER``
|
||||
- 0x20
|
||||
- This supports the Tuner type.
|
||||
* .. _`CEC-OP-ALL-DEVTYPE-PLAYBACK`:
|
||||
|
||||
- This supports the TV type.
|
||||
- ``CEC_OP_ALL_DEVTYPE_PLAYBACK``
|
||||
- 0x10
|
||||
- This supports the Playback type.
|
||||
* .. _`CEC-OP-ALL-DEVTYPE-AUDIOSYSTEM`:
|
||||
|
||||
- .. _`CEC-OP-ALL-DEVTYPE-RECORD`:
|
||||
- ``CEC_OP_ALL_DEVTYPE_AUDIOSYSTEM``
|
||||
- 0x08
|
||||
- This supports the Audio System type.
|
||||
* .. _`CEC-OP-ALL-DEVTYPE-SWITCH`:
|
||||
|
||||
- ``CEC_OP_ALL_DEVTYPE_RECORD``
|
||||
|
||||
- 0x40
|
||||
|
||||
- This supports the Recording type.
|
||||
|
||||
- .. _`CEC-OP-ALL-DEVTYPE-TUNER`:
|
||||
|
||||
- ``CEC_OP_ALL_DEVTYPE_TUNER``
|
||||
|
||||
- 0x20
|
||||
|
||||
- This supports the Tuner type.
|
||||
|
||||
- .. _`CEC-OP-ALL-DEVTYPE-PLAYBACK`:
|
||||
|
||||
- ``CEC_OP_ALL_DEVTYPE_PLAYBACK``
|
||||
|
||||
- 0x10
|
||||
|
||||
- This supports the Playback type.
|
||||
|
||||
- .. _`CEC-OP-ALL-DEVTYPE-AUDIOSYSTEM`:
|
||||
|
||||
- ``CEC_OP_ALL_DEVTYPE_AUDIOSYSTEM``
|
||||
|
||||
- 0x08
|
||||
|
||||
- This supports the Audio System type.
|
||||
|
||||
- .. _`CEC-OP-ALL-DEVTYPE-SWITCH`:
|
||||
|
||||
- ``CEC_OP_ALL_DEVTYPE_SWITCH``
|
||||
|
||||
- 0x04
|
||||
|
||||
- This supports the CEC Switch or Video Processing type.
|
||||
- ``CEC_OP_ALL_DEVTYPE_SWITCH``
|
||||
- 0x04
|
||||
- This supports the CEC Switch or Video Processing type.
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -58,26 +58,16 @@ it is guaranteed that the state did change in between the two events.
|
|||
:stub-columns: 0
|
||||
:widths: 1 1 8
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- __u16
|
||||
|
||||
- ``phys_addr``
|
||||
|
||||
- The current physical address. This is ``CEC_PHYS_ADDR_INVALID`` if no
|
||||
* - __u16
|
||||
- ``phys_addr``
|
||||
- The current physical address. This is ``CEC_PHYS_ADDR_INVALID`` if no
|
||||
valid physical address is set.
|
||||
|
||||
- .. row 2
|
||||
|
||||
- __u16
|
||||
|
||||
- ``log_addr_mask``
|
||||
|
||||
- The current set of claimed logical addresses. This is 0 if no logical
|
||||
addresses are claimed or if ``phys_addr`` is ``CEC_PHYS_ADDR_INVALID``.
|
||||
If bit 15 is set (``1 << CEC_LOG_ADDR_UNREGISTERED``) then this device
|
||||
has the unregistered logical address. In that case all other bits are 0.
|
||||
* - __u16
|
||||
- ``log_addr_mask``
|
||||
- The current set of claimed logical addresses. This is 0 if no logical
|
||||
addresses are claimed or if ``phys_addr`` is ``CEC_PHYS_ADDR_INVALID``.
|
||||
If bit 15 is set (``1 << CEC_LOG_ADDR_UNREGISTERED``) then this device
|
||||
has the unregistered logical address. In that case all other bits are 0.
|
||||
|
||||
|
||||
.. c:type:: cec_event_lost_msgs
|
||||
|
@ -89,22 +79,17 @@ it is guaranteed that the state did change in between the two events.
|
|||
:stub-columns: 0
|
||||
:widths: 1 1 16
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- __u32
|
||||
|
||||
- ``lost_msgs``
|
||||
|
||||
- Set to the number of lost messages since the filehandle was opened
|
||||
or since the last time this event was dequeued for this
|
||||
filehandle. The messages lost are the oldest messages. So when a
|
||||
new message arrives and there is no more room, then the oldest
|
||||
message is discarded to make room for the new one. The internal
|
||||
size of the message queue guarantees that all messages received in
|
||||
the last two seconds will be stored. Since messages should be
|
||||
replied to within a second according to the CEC specification,
|
||||
this is more than enough.
|
||||
* - __u32
|
||||
- ``lost_msgs``
|
||||
- Set to the number of lost messages since the filehandle was opened
|
||||
or since the last time this event was dequeued for this
|
||||
filehandle. The messages lost are the oldest messages. So when a
|
||||
new message arrives and there is no more room, then the oldest
|
||||
message is discarded to make room for the new one. The internal
|
||||
size of the message queue guarantees that all messages received in
|
||||
the last two seconds will be stored. Since messages should be
|
||||
replied to within a second according to the CEC specification,
|
||||
this is more than enough.
|
||||
|
||||
|
||||
.. tabularcolumns:: |p{1.0cm}|p{4.2cm}|p{2.5cm}|p{8.8cm}|
|
||||
|
@ -116,62 +101,32 @@ it is guaranteed that the state did change in between the two events.
|
|||
:stub-columns: 0
|
||||
:widths: 1 1 1 8
|
||||
|
||||
* - __u64
|
||||
- ``ts``
|
||||
- :cspan:`1` Timestamp of the event in ns.
|
||||
|
||||
- .. row 1
|
||||
|
||||
- __u64
|
||||
|
||||
- ``ts``
|
||||
|
||||
- :cspan:`1` Timestamp of the event in ns.
|
||||
|
||||
The timestamp has been taken from the ``CLOCK_MONOTONIC`` clock. To access
|
||||
the same clock from userspace use :c:func:`clock_gettime`.
|
||||
|
||||
- .. row 2
|
||||
|
||||
- __u32
|
||||
|
||||
- ``event``
|
||||
|
||||
- :cspan:`1` The CEC event type, see :ref:`cec-events`.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- __u32
|
||||
|
||||
- ``flags``
|
||||
|
||||
- :cspan:`1` Event flags, see :ref:`cec-event-flags`.
|
||||
|
||||
- .. row 4
|
||||
|
||||
- union
|
||||
|
||||
- (anonymous)
|
||||
|
||||
-
|
||||
-
|
||||
|
||||
- .. row 5
|
||||
|
||||
-
|
||||
- struct cec_event_state_change
|
||||
|
||||
- ``state_change``
|
||||
|
||||
- The new adapter state as sent by the :ref:`CEC_EVENT_STATE_CHANGE <CEC-EVENT-STATE-CHANGE>`
|
||||
event.
|
||||
|
||||
- .. row 6
|
||||
|
||||
-
|
||||
- struct cec_event_lost_msgs
|
||||
|
||||
- ``lost_msgs``
|
||||
|
||||
- The number of lost messages as sent by the :ref:`CEC_EVENT_LOST_MSGS <CEC-EVENT-LOST-MSGS>`
|
||||
event.
|
||||
The timestamp has been taken from the ``CLOCK_MONOTONIC`` clock. To access
|
||||
the same clock from userspace use :c:func:`clock_gettime`.
|
||||
* - __u32
|
||||
- ``event``
|
||||
- :cspan:`1` The CEC event type, see :ref:`cec-events`.
|
||||
* - __u32
|
||||
- ``flags``
|
||||
- :cspan:`1` Event flags, see :ref:`cec-event-flags`.
|
||||
* - union
|
||||
- (anonymous)
|
||||
-
|
||||
-
|
||||
* -
|
||||
- struct cec_event_state_change
|
||||
- ``state_change``
|
||||
- The new adapter state as sent by the :ref:`CEC_EVENT_STATE_CHANGE <CEC-EVENT-STATE-CHANGE>`
|
||||
event.
|
||||
* -
|
||||
- struct cec_event_lost_msgs
|
||||
- ``lost_msgs``
|
||||
- The number of lost messages as sent by the :ref:`CEC_EVENT_LOST_MSGS <CEC-EVENT-LOST-MSGS>`
|
||||
event.
|
||||
|
||||
|
||||
.. tabularcolumns:: |p{5.6cm}|p{0.9cm}|p{11.0cm}|
|
||||
|
@ -183,25 +138,19 @@ it is guaranteed that the state did change in between the two events.
|
|||
:stub-columns: 0
|
||||
:widths: 3 1 16
|
||||
|
||||
* .. _`CEC-EVENT-STATE-CHANGE`:
|
||||
|
||||
- .. _`CEC-EVENT-STATE-CHANGE`:
|
||||
- ``CEC_EVENT_STATE_CHANGE``
|
||||
- 1
|
||||
- Generated when the CEC Adapter's state changes. When open() is
|
||||
called an initial event will be generated for that filehandle with
|
||||
the CEC Adapter's state at that time.
|
||||
* .. _`CEC-EVENT-LOST-MSGS`:
|
||||
|
||||
- ``CEC_EVENT_STATE_CHANGE``
|
||||
|
||||
- 1
|
||||
|
||||
- Generated when the CEC Adapter's state changes. When open() is
|
||||
called an initial event will be generated for that filehandle with
|
||||
the CEC Adapter's state at that time.
|
||||
|
||||
- .. _`CEC-EVENT-LOST-MSGS`:
|
||||
|
||||
- ``CEC_EVENT_LOST_MSGS``
|
||||
|
||||
- 2
|
||||
|
||||
- Generated if one or more CEC messages were lost because the
|
||||
application didn't dequeue CEC messages fast enough.
|
||||
- ``CEC_EVENT_LOST_MSGS``
|
||||
- 2
|
||||
- Generated if one or more CEC messages were lost because the
|
||||
application didn't dequeue CEC messages fast enough.
|
||||
|
||||
|
||||
.. tabularcolumns:: |p{6.0cm}|p{0.6cm}|p{10.9cm}|
|
||||
|
@ -213,17 +162,14 @@ it is guaranteed that the state did change in between the two events.
|
|||
:stub-columns: 0
|
||||
:widths: 3 1 8
|
||||
|
||||
* .. _`CEC-EVENT-FL-INITIAL-VALUE`:
|
||||
|
||||
- .. _`CEC-EVENT-FL-INITIAL-VALUE`:
|
||||
|
||||
- ``CEC_EVENT_FL_INITIAL_VALUE``
|
||||
|
||||
- 1
|
||||
|
||||
- Set for the initial events that are generated when the device is
|
||||
opened. See the table above for which events do this. This allows
|
||||
applications to learn the initial state of the CEC adapter at
|
||||
open() time.
|
||||
- ``CEC_EVENT_FL_INITIAL_VALUE``
|
||||
- 1
|
||||
- Set for the initial events that are generated when the device is
|
||||
opened. See the table above for which events do this. This allows
|
||||
applications to learn the initial state of the CEC adapter at
|
||||
open() time.
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -83,37 +83,28 @@ Available initiator modes are:
|
|||
:stub-columns: 0
|
||||
:widths: 3 1 16
|
||||
|
||||
* .. _`CEC-MODE-NO-INITIATOR`:
|
||||
|
||||
- .. _`CEC-MODE-NO-INITIATOR`:
|
||||
- ``CEC_MODE_NO_INITIATOR``
|
||||
- 0x0
|
||||
- This is not an initiator, i.e. it cannot transmit CEC messages or
|
||||
make any other changes to the CEC adapter.
|
||||
* .. _`CEC-MODE-INITIATOR`:
|
||||
|
||||
- ``CEC_MODE_NO_INITIATOR``
|
||||
- ``CEC_MODE_INITIATOR``
|
||||
- 0x1
|
||||
- This is an initiator (the default when the device is opened) and
|
||||
it can transmit CEC messages and make changes to the CEC adapter,
|
||||
unless there is an exclusive initiator.
|
||||
* .. _`CEC-MODE-EXCL-INITIATOR`:
|
||||
|
||||
- 0x0
|
||||
|
||||
- This is not an initiator, i.e. it cannot transmit CEC messages or
|
||||
make any other changes to the CEC adapter.
|
||||
|
||||
- .. _`CEC-MODE-INITIATOR`:
|
||||
|
||||
- ``CEC_MODE_INITIATOR``
|
||||
|
||||
- 0x1
|
||||
|
||||
- This is an initiator (the default when the device is opened) and
|
||||
it can transmit CEC messages and make changes to the CEC adapter,
|
||||
unless there is an exclusive initiator.
|
||||
|
||||
- .. _`CEC-MODE-EXCL-INITIATOR`:
|
||||
|
||||
- ``CEC_MODE_EXCL_INITIATOR``
|
||||
|
||||
- 0x2
|
||||
|
||||
- This is an exclusive initiator and this file descriptor is the
|
||||
only one that can transmit CEC messages and make changes to the
|
||||
CEC adapter. If someone else is already the exclusive initiator
|
||||
then an attempt to become one will return the ``EBUSY`` error code
|
||||
error.
|
||||
- ``CEC_MODE_EXCL_INITIATOR``
|
||||
- 0x2
|
||||
- This is an exclusive initiator and this file descriptor is the
|
||||
only one that can transmit CEC messages and make changes to the
|
||||
CEC adapter. If someone else is already the exclusive initiator
|
||||
then an attempt to become one will return the ``EBUSY`` error code
|
||||
error.
|
||||
|
||||
|
||||
Available follower modes are:
|
||||
|
@ -127,86 +118,68 @@ Available follower modes are:
|
|||
:stub-columns: 0
|
||||
:widths: 3 1 16
|
||||
|
||||
* .. _`CEC-MODE-NO-FOLLOWER`:
|
||||
|
||||
- .. _`CEC-MODE-NO-FOLLOWER`:
|
||||
- ``CEC_MODE_NO_FOLLOWER``
|
||||
- 0x00
|
||||
- This is not a follower (the default when the device is opened).
|
||||
* .. _`CEC-MODE-FOLLOWER`:
|
||||
|
||||
- ``CEC_MODE_NO_FOLLOWER``
|
||||
- ``CEC_MODE_FOLLOWER``
|
||||
- 0x10
|
||||
- This is a follower and it will receive CEC messages unless there
|
||||
is an exclusive follower. You cannot become a follower if
|
||||
:ref:`CEC_CAP_TRANSMIT <CEC-CAP-TRANSMIT>` is not set or if :ref:`CEC_MODE_NO_INITIATOR <CEC-MODE-NO-INITIATOR>`
|
||||
was specified, the ``EINVAL`` error code is returned in that case.
|
||||
* .. _`CEC-MODE-EXCL-FOLLOWER`:
|
||||
|
||||
- 0x00
|
||||
- ``CEC_MODE_EXCL_FOLLOWER``
|
||||
- 0x20
|
||||
- This is an exclusive follower and only this file descriptor will
|
||||
receive CEC messages for processing. If someone else is already
|
||||
the exclusive follower then an attempt to become one will return
|
||||
the ``EBUSY`` error code. You cannot become a follower if
|
||||
:ref:`CEC_CAP_TRANSMIT <CEC-CAP-TRANSMIT>` is not set or if :ref:`CEC_MODE_NO_INITIATOR <CEC-MODE-NO-INITIATOR>`
|
||||
was specified, the ``EINVAL`` error code is returned in that case.
|
||||
* .. _`CEC-MODE-EXCL-FOLLOWER-PASSTHRU`:
|
||||
|
||||
- This is not a follower (the default when the device is opened).
|
||||
- ``CEC_MODE_EXCL_FOLLOWER_PASSTHRU``
|
||||
- 0x30
|
||||
- This is an exclusive follower and only this file descriptor will
|
||||
receive CEC messages for processing. In addition it will put the
|
||||
CEC device into passthrough mode, allowing the exclusive follower
|
||||
to handle most core messages instead of relying on the CEC
|
||||
framework for that. If someone else is already the exclusive
|
||||
follower then an attempt to become one will return the ``EBUSY`` error
|
||||
code. You cannot become a follower if :ref:`CEC_CAP_TRANSMIT <CEC-CAP-TRANSMIT>`
|
||||
is not set or if :ref:`CEC_MODE_NO_INITIATOR <CEC-MODE-NO-INITIATOR>` was specified,
|
||||
the ``EINVAL`` error code is returned in that case.
|
||||
* .. _`CEC-MODE-MONITOR`:
|
||||
|
||||
- .. _`CEC-MODE-FOLLOWER`:
|
||||
- ``CEC_MODE_MONITOR``
|
||||
- 0xe0
|
||||
- Put the file descriptor into monitor mode. Can only be used in
|
||||
combination with :ref:`CEC_MODE_NO_INITIATOR <CEC-MODE-NO-INITIATOR>`, otherwise EINVAL error
|
||||
code will be returned. In monitor mode all messages this CEC
|
||||
device transmits and all messages it receives (both broadcast
|
||||
messages and directed messages for one its logical addresses) will
|
||||
be reported. This is very useful for debugging. This is only
|
||||
allowed if the process has the ``CAP_NET_ADMIN`` capability. If
|
||||
that is not set, then the ``EPERM`` error code is returned.
|
||||
* .. _`CEC-MODE-MONITOR-ALL`:
|
||||
|
||||
- ``CEC_MODE_FOLLOWER``
|
||||
|
||||
- 0x10
|
||||
|
||||
- This is a follower and it will receive CEC messages unless there
|
||||
is an exclusive follower. You cannot become a follower if
|
||||
:ref:`CEC_CAP_TRANSMIT <CEC-CAP-TRANSMIT>` is not set or if :ref:`CEC_MODE_NO_INITIATOR <CEC-MODE-NO-INITIATOR>`
|
||||
was specified, the ``EINVAL`` error code is returned in that case.
|
||||
|
||||
- .. _`CEC-MODE-EXCL-FOLLOWER`:
|
||||
|
||||
- ``CEC_MODE_EXCL_FOLLOWER``
|
||||
|
||||
- 0x20
|
||||
|
||||
- This is an exclusive follower and only this file descriptor will
|
||||
receive CEC messages for processing. If someone else is already
|
||||
the exclusive follower then an attempt to become one will return
|
||||
the ``EBUSY`` error code. You cannot become a follower if
|
||||
:ref:`CEC_CAP_TRANSMIT <CEC-CAP-TRANSMIT>` is not set or if :ref:`CEC_MODE_NO_INITIATOR <CEC-MODE-NO-INITIATOR>`
|
||||
was specified, the ``EINVAL`` error code is returned in that case.
|
||||
|
||||
- .. _`CEC-MODE-EXCL-FOLLOWER-PASSTHRU`:
|
||||
|
||||
- ``CEC_MODE_EXCL_FOLLOWER_PASSTHRU``
|
||||
|
||||
- 0x30
|
||||
|
||||
- This is an exclusive follower and only this file descriptor will
|
||||
receive CEC messages for processing. In addition it will put the
|
||||
CEC device into passthrough mode, allowing the exclusive follower
|
||||
to handle most core messages instead of relying on the CEC
|
||||
framework for that. If someone else is already the exclusive
|
||||
follower then an attempt to become one will return the ``EBUSY`` error
|
||||
code. You cannot become a follower if :ref:`CEC_CAP_TRANSMIT <CEC-CAP-TRANSMIT>`
|
||||
is not set or if :ref:`CEC_MODE_NO_INITIATOR <CEC-MODE-NO-INITIATOR>` was specified,
|
||||
the ``EINVAL`` error code is returned in that case.
|
||||
|
||||
- .. _`CEC-MODE-MONITOR`:
|
||||
|
||||
- ``CEC_MODE_MONITOR``
|
||||
|
||||
- 0xe0
|
||||
|
||||
- Put the file descriptor into monitor mode. Can only be used in
|
||||
combination with :ref:`CEC_MODE_NO_INITIATOR <CEC-MODE-NO-INITIATOR>`, otherwise EINVAL error
|
||||
code will be returned. In monitor mode all messages this CEC
|
||||
device transmits and all messages it receives (both broadcast
|
||||
messages and directed messages for one its logical addresses) will
|
||||
be reported. This is very useful for debugging. This is only
|
||||
allowed if the process has the ``CAP_NET_ADMIN`` capability. If
|
||||
that is not set, then the ``EPERM`` error code is returned.
|
||||
|
||||
- .. _`CEC-MODE-MONITOR-ALL`:
|
||||
|
||||
- ``CEC_MODE_MONITOR_ALL``
|
||||
|
||||
- 0xf0
|
||||
|
||||
- Put the file descriptor into 'monitor all' mode. Can only be used
|
||||
in combination with :ref:`CEC_MODE_NO_INITIATOR <CEC-MODE-NO-INITIATOR>`, otherwise
|
||||
the ``EINVAL`` error code will be returned. In 'monitor all' mode all messages
|
||||
this CEC device transmits and all messages it receives, including
|
||||
directed messages for other CEC devices will be reported. This is
|
||||
very useful for debugging, but not all devices support this. This
|
||||
mode requires that the :ref:`CEC_CAP_MONITOR_ALL <CEC-CAP-MONITOR-ALL>` capability is set,
|
||||
otherwise the ``EINVAL`` error code is returned. This is only allowed if
|
||||
the process has the ``CAP_NET_ADMIN`` capability. If that is not
|
||||
set, then the ``EPERM`` error code is returned.
|
||||
- ``CEC_MODE_MONITOR_ALL``
|
||||
- 0xf0
|
||||
- Put the file descriptor into 'monitor all' mode. Can only be used
|
||||
in combination with :ref:`CEC_MODE_NO_INITIATOR <CEC-MODE-NO-INITIATOR>`, otherwise
|
||||
the ``EINVAL`` error code will be returned. In 'monitor all' mode all messages
|
||||
this CEC device transmits and all messages it receives, including
|
||||
directed messages for other CEC devices will be reported. This is
|
||||
very useful for debugging, but not all devices support this. This
|
||||
mode requires that the :ref:`CEC_CAP_MONITOR_ALL <CEC-CAP-MONITOR-ALL>` capability is set,
|
||||
otherwise the ``EINVAL`` error code is returned. This is only allowed if
|
||||
the process has the ``CAP_NET_ADMIN`` capability. If that is not
|
||||
set, then the ``EPERM`` error code is returned.
|
||||
|
||||
|
||||
Core message processing details:
|
||||
|
@ -220,76 +193,58 @@ Core message processing details:
|
|||
:stub-columns: 0
|
||||
:widths: 1 8
|
||||
|
||||
* .. _`CEC-MSG-GET-CEC-VERSION`:
|
||||
|
||||
- .. _`CEC-MSG-GET-CEC-VERSION`:
|
||||
- ``CEC_MSG_GET_CEC_VERSION``
|
||||
- When in passthrough mode this message has to be handled by
|
||||
userspace, otherwise the core will return the CEC version that was
|
||||
set with :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`.
|
||||
* .. _`CEC-MSG-GIVE-DEVICE-VENDOR-ID`:
|
||||
|
||||
- ``CEC_MSG_GET_CEC_VERSION``
|
||||
- ``CEC_MSG_GIVE_DEVICE_VENDOR_ID``
|
||||
- When in passthrough mode this message has to be handled by
|
||||
userspace, otherwise the core will return the vendor ID that was
|
||||
set with :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`.
|
||||
* .. _`CEC-MSG-ABORT`:
|
||||
|
||||
- When in passthrough mode this message has to be handled by
|
||||
userspace, otherwise the core will return the CEC version that was
|
||||
set with :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`.
|
||||
- ``CEC_MSG_ABORT``
|
||||
- When in passthrough mode this message has to be handled by
|
||||
userspace, otherwise the core will return a feature refused
|
||||
message as per the specification.
|
||||
* .. _`CEC-MSG-GIVE-PHYSICAL-ADDR`:
|
||||
|
||||
- .. _`CEC-MSG-GIVE-DEVICE-VENDOR-ID`:
|
||||
- ``CEC_MSG_GIVE_PHYSICAL_ADDR``
|
||||
- When in passthrough mode this message has to be handled by
|
||||
userspace, otherwise the core will report the current physical
|
||||
address.
|
||||
* .. _`CEC-MSG-GIVE-OSD-NAME`:
|
||||
|
||||
- ``CEC_MSG_GIVE_DEVICE_VENDOR_ID``
|
||||
- ``CEC_MSG_GIVE_OSD_NAME``
|
||||
- When in passthrough mode this message has to be handled by
|
||||
userspace, otherwise the core will report the current OSD name as
|
||||
was set with :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`.
|
||||
* .. _`CEC-MSG-GIVE-FEATURES`:
|
||||
|
||||
- When in passthrough mode this message has to be handled by
|
||||
userspace, otherwise the core will return the vendor ID that was
|
||||
set with :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`.
|
||||
- ``CEC_MSG_GIVE_FEATURES``
|
||||
- When in passthrough mode this message has to be handled by
|
||||
userspace, otherwise the core will report the current features as
|
||||
was set with :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`
|
||||
or the message is ignored if the CEC version was older than 2.0.
|
||||
* .. _`CEC-MSG-USER-CONTROL-PRESSED`:
|
||||
|
||||
- .. _`CEC-MSG-ABORT`:
|
||||
- ``CEC_MSG_USER_CONTROL_PRESSED``
|
||||
- If :ref:`CEC_CAP_RC <CEC-CAP-RC>` is set, then generate a remote control key
|
||||
press. This message is always passed on to userspace.
|
||||
* .. _`CEC-MSG-USER-CONTROL-RELEASED`:
|
||||
|
||||
- ``CEC_MSG_ABORT``
|
||||
- ``CEC_MSG_USER_CONTROL_RELEASED``
|
||||
- If :ref:`CEC_CAP_RC <CEC-CAP-RC>` is set, then generate a remote control key
|
||||
release. This message is always passed on to userspace.
|
||||
* .. _`CEC-MSG-REPORT-PHYSICAL-ADDR`:
|
||||
|
||||
- When in passthrough mode this message has to be handled by
|
||||
userspace, otherwise the core will return a feature refused
|
||||
message as per the specification.
|
||||
|
||||
- .. _`CEC-MSG-GIVE-PHYSICAL-ADDR`:
|
||||
|
||||
- ``CEC_MSG_GIVE_PHYSICAL_ADDR``
|
||||
|
||||
- When in passthrough mode this message has to be handled by
|
||||
userspace, otherwise the core will report the current physical
|
||||
address.
|
||||
|
||||
- .. _`CEC-MSG-GIVE-OSD-NAME`:
|
||||
|
||||
- ``CEC_MSG_GIVE_OSD_NAME``
|
||||
|
||||
- When in passthrough mode this message has to be handled by
|
||||
userspace, otherwise the core will report the current OSD name as
|
||||
was set with :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`.
|
||||
|
||||
- .. _`CEC-MSG-GIVE-FEATURES`:
|
||||
|
||||
- ``CEC_MSG_GIVE_FEATURES``
|
||||
|
||||
- When in passthrough mode this message has to be handled by
|
||||
userspace, otherwise the core will report the current features as
|
||||
was set with :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`
|
||||
or the message is ignored if the CEC version was older than 2.0.
|
||||
|
||||
- .. _`CEC-MSG-USER-CONTROL-PRESSED`:
|
||||
|
||||
- ``CEC_MSG_USER_CONTROL_PRESSED``
|
||||
|
||||
- If :ref:`CEC_CAP_RC <CEC-CAP-RC>` is set, then generate a remote control key
|
||||
press. This message is always passed on to userspace.
|
||||
|
||||
- .. _`CEC-MSG-USER-CONTROL-RELEASED`:
|
||||
|
||||
- ``CEC_MSG_USER_CONTROL_RELEASED``
|
||||
|
||||
- If :ref:`CEC_CAP_RC <CEC-CAP-RC>` is set, then generate a remote control key
|
||||
release. This message is always passed on to userspace.
|
||||
|
||||
- .. _`CEC-MSG-REPORT-PHYSICAL-ADDR`:
|
||||
|
||||
- ``CEC_MSG_REPORT_PHYSICAL_ADDR``
|
||||
|
||||
- The CEC framework will make note of the reported physical address
|
||||
and then just pass the message on to userspace.
|
||||
- ``CEC_MSG_REPORT_PHYSICAL_ADDR``
|
||||
- The CEC framework will make note of the reported physical address
|
||||
and then just pass the message on to userspace.
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -86,173 +86,126 @@ result.
|
|||
:stub-columns: 0
|
||||
:widths: 1 1 16
|
||||
|
||||
* - __u64
|
||||
- ``tx_ts``
|
||||
- Timestamp in ns of when the last byte of the message was transmitted.
|
||||
The timestamp has been taken from the ``CLOCK_MONOTONIC`` clock. To access
|
||||
the same clock from userspace use :c:func:`clock_gettime`.
|
||||
* - __u64
|
||||
- ``rx_ts``
|
||||
- Timestamp in ns of when the last byte of the message was received.
|
||||
The timestamp has been taken from the ``CLOCK_MONOTONIC`` clock. To access
|
||||
the same clock from userspace use :c:func:`clock_gettime`.
|
||||
* - __u32
|
||||
- ``len``
|
||||
- The length of the message. For :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>` this is filled in
|
||||
by the application. The driver will fill this in for
|
||||
:ref:`ioctl CEC_RECEIVE <CEC_RECEIVE>`. For :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>` it will be
|
||||
filled in by the driver with the length of the reply message if ``reply`` was set.
|
||||
* - __u32
|
||||
- ``timeout``
|
||||
- The timeout in milliseconds. This is the time the device will wait
|
||||
for a message to be received before timing out. If it is set to 0,
|
||||
then it will wait indefinitely when it is called by :ref:`ioctl CEC_RECEIVE <CEC_RECEIVE>`.
|
||||
If it is 0 and it is called by :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>`,
|
||||
then it will be replaced by 1000 if the ``reply`` is non-zero or
|
||||
ignored if ``reply`` is 0.
|
||||
* - __u32
|
||||
- ``sequence``
|
||||
- A non-zero sequence number is automatically assigned by the CEC framework
|
||||
for all transmitted messages. It is used by the CEC framework when it queues
|
||||
the transmit result (when transmit was called in non-blocking mode). This
|
||||
allows the application to associate the received message with the original
|
||||
transmit.
|
||||
* - __u32
|
||||
- ``flags``
|
||||
- Flags. See :ref:`cec-msg-flags` for a list of available flags.
|
||||
* - __u8
|
||||
- ``tx_status``
|
||||
- The status bits of the transmitted message. See
|
||||
:ref:`cec-tx-status` for the possible status values. It is 0 if
|
||||
this messages was received, not transmitted.
|
||||
* - __u8
|
||||
- ``msg[16]``
|
||||
- The message payload. For :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>` this is filled in by the
|
||||
application. The driver will fill this in for :ref:`ioctl CEC_RECEIVE <CEC_RECEIVE>`.
|
||||
For :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>` it will be filled in by the driver with
|
||||
the payload of the reply message if ``timeout`` was set.
|
||||
* - __u8
|
||||
- ``reply``
|
||||
- Wait until this message is replied. If ``reply`` is 0 and the
|
||||
``timeout`` is 0, then don't wait for a reply but return after
|
||||
transmitting the message. Ignored by :ref:`ioctl CEC_RECEIVE <CEC_RECEIVE>`.
|
||||
The case where ``reply`` is 0 (this is the opcode for the Feature Abort
|
||||
message) and ``timeout`` is non-zero is specifically allowed to make it
|
||||
possible to send a message and wait up to ``timeout`` milliseconds for a
|
||||
Feature Abort reply. In this case ``rx_status`` will either be set
|
||||
to :ref:`CEC_RX_STATUS_TIMEOUT <CEC-RX-STATUS-TIMEOUT>` or
|
||||
:ref:`CEC_RX_STATUS_FEATURE_ABORT <CEC-RX-STATUS-FEATURE-ABORT>`.
|
||||
|
||||
- .. row 1
|
||||
If the transmitter message is ``CEC_MSG_INITIATE_ARC`` then the ``reply``
|
||||
values ``CEC_MSG_REPORT_ARC_INITIATED`` and ``CEC_MSG_REPORT_ARC_TERMINATED``
|
||||
are processed differently: either value will match both possible replies.
|
||||
The reason is that the ``CEC_MSG_INITIATE_ARC`` message is the only CEC
|
||||
message that has two possible replies other than Feature Abort. The
|
||||
``reply`` field will be updated with the actual reply so that it is
|
||||
synchronized with the contents of the received message.
|
||||
* - __u8
|
||||
- ``rx_status``
|
||||
- The status bits of the received message. See
|
||||
:ref:`cec-rx-status` for the possible status values. It is 0 if
|
||||
this message was transmitted, not received, unless this is the
|
||||
reply to a transmitted message. In that case both ``rx_status``
|
||||
and ``tx_status`` are set.
|
||||
* - __u8
|
||||
- ``tx_status``
|
||||
- The status bits of the transmitted message. See
|
||||
:ref:`cec-tx-status` for the possible status values. It is 0 if
|
||||
this messages was received, not transmitted.
|
||||
* - __u8
|
||||
- ``tx_arb_lost_cnt``
|
||||
- A counter of the number of transmit attempts that resulted in the
|
||||
Arbitration Lost error. This is only set if the hardware supports
|
||||
this, otherwise it is always 0. This counter is only valid if the
|
||||
:ref:`CEC_TX_STATUS_ARB_LOST <CEC-TX-STATUS-ARB-LOST>` status bit is set.
|
||||
* - __u8
|
||||
- ``tx_nack_cnt``
|
||||
- A counter of the number of transmit attempts that resulted in the
|
||||
Not Acknowledged error. This is only set if the hardware supports
|
||||
this, otherwise it is always 0. This counter is only valid if the
|
||||
:ref:`CEC_TX_STATUS_NACK <CEC-TX-STATUS-NACK>` status bit is set.
|
||||
* - __u8
|
||||
- ``tx_low_drive_cnt``
|
||||
- A counter of the number of transmit attempts that resulted in the
|
||||
Arbitration Lost error. This is only set if the hardware supports
|
||||
this, otherwise it is always 0. This counter is only valid if the
|
||||
:ref:`CEC_TX_STATUS_LOW_DRIVE <CEC-TX-STATUS-LOW-DRIVE>` status bit is set.
|
||||
* - __u8
|
||||
- ``tx_error_cnt``
|
||||
- A counter of the number of transmit errors other than Arbitration
|
||||
Lost or Not Acknowledged. This is only set if the hardware
|
||||
supports this, otherwise it is always 0. This counter is only
|
||||
valid if the :ref:`CEC_TX_STATUS_ERROR <CEC-TX-STATUS-ERROR>` status bit is set.
|
||||
|
||||
- __u64
|
||||
|
||||
- ``tx_ts``
|
||||
.. _cec-msg-flags:
|
||||
|
||||
- Timestamp in ns of when the last byte of the message was transmitted.
|
||||
The timestamp has been taken from the ``CLOCK_MONOTONIC`` clock. To access
|
||||
the same clock from userspace use :c:func:`clock_gettime`.
|
||||
.. flat-table:: Flags for struct cec_msg
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 3 1 4
|
||||
|
||||
- .. row 2
|
||||
* .. _`CEC-MSG-FL-REPLY-TO-FOLLOWERS`:
|
||||
|
||||
- __u64
|
||||
|
||||
- ``rx_ts``
|
||||
|
||||
- Timestamp in ns of when the last byte of the message was received.
|
||||
The timestamp has been taken from the ``CLOCK_MONOTONIC`` clock. To access
|
||||
the same clock from userspace use :c:func:`clock_gettime`.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- __u32
|
||||
|
||||
- ``len``
|
||||
|
||||
- The length of the message. For :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>` this is filled in
|
||||
by the application. The driver will fill this in for
|
||||
:ref:`ioctl CEC_RECEIVE <CEC_RECEIVE>`. For :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>` it will be
|
||||
filled in by the driver with the length of the reply message if ``reply`` was set.
|
||||
|
||||
- .. row 4
|
||||
|
||||
- __u32
|
||||
|
||||
- ``timeout``
|
||||
|
||||
- The timeout in milliseconds. This is the time the device will wait
|
||||
for a message to be received before timing out. If it is set to 0,
|
||||
then it will wait indefinitely when it is called by :ref:`ioctl CEC_RECEIVE <CEC_RECEIVE>`.
|
||||
If it is 0 and it is called by :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>`,
|
||||
then it will be replaced by 1000 if the ``reply`` is non-zero or
|
||||
ignored if ``reply`` is 0.
|
||||
|
||||
- .. row 5
|
||||
|
||||
- __u32
|
||||
|
||||
- ``sequence``
|
||||
|
||||
- A non-zero sequence number is automatically assigned by the CEC framework
|
||||
for all transmitted messages. It is used by the CEC framework when it queues
|
||||
the transmit result (when transmit was called in non-blocking mode). This
|
||||
allows the application to associate the received message with the original
|
||||
transmit.
|
||||
|
||||
- .. row 6
|
||||
|
||||
- __u32
|
||||
|
||||
- ``flags``
|
||||
|
||||
- Flags. No flags are defined yet, so set this to 0.
|
||||
|
||||
- .. row 7
|
||||
|
||||
- __u8
|
||||
|
||||
- ``tx_status``
|
||||
|
||||
- The status bits of the transmitted message. See
|
||||
:ref:`cec-tx-status` for the possible status values. It is 0 if
|
||||
this messages was received, not transmitted.
|
||||
|
||||
- .. row 8
|
||||
|
||||
- __u8
|
||||
|
||||
- ``msg[16]``
|
||||
|
||||
- The message payload. For :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>` this is filled in by the
|
||||
application. The driver will fill this in for :ref:`ioctl CEC_RECEIVE <CEC_RECEIVE>`.
|
||||
For :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>` it will be filled in by the driver with
|
||||
the payload of the reply message if ``timeout`` was set.
|
||||
|
||||
- .. row 8
|
||||
|
||||
- __u8
|
||||
|
||||
- ``reply``
|
||||
|
||||
- Wait until this message is replied. If ``reply`` is 0 and the
|
||||
``timeout`` is 0, then don't wait for a reply but return after
|
||||
transmitting the message. Ignored by :ref:`ioctl CEC_RECEIVE <CEC_RECEIVE>`.
|
||||
The case where ``reply`` is 0 (this is the opcode for the Feature Abort
|
||||
message) and ``timeout`` is non-zero is specifically allowed to make it
|
||||
possible to send a message and wait up to ``timeout`` milliseconds for a
|
||||
Feature Abort reply. In this case ``rx_status`` will either be set
|
||||
to :ref:`CEC_RX_STATUS_TIMEOUT <CEC-RX-STATUS-TIMEOUT>` or
|
||||
:ref:`CEC_RX_STATUS_FEATURE_ABORT <CEC-RX-STATUS-FEATURE-ABORT>`.
|
||||
|
||||
- .. row 9
|
||||
|
||||
- __u8
|
||||
|
||||
- ``rx_status``
|
||||
|
||||
- The status bits of the received message. See
|
||||
:ref:`cec-rx-status` for the possible status values. It is 0 if
|
||||
this message was transmitted, not received, unless this is the
|
||||
reply to a transmitted message. In that case both ``rx_status``
|
||||
and ``tx_status`` are set.
|
||||
|
||||
- .. row 10
|
||||
|
||||
- __u8
|
||||
|
||||
- ``tx_status``
|
||||
|
||||
- The status bits of the transmitted message. See
|
||||
:ref:`cec-tx-status` for the possible status values. It is 0 if
|
||||
this messages was received, not transmitted.
|
||||
|
||||
- .. row 11
|
||||
|
||||
- __u8
|
||||
|
||||
- ``tx_arb_lost_cnt``
|
||||
|
||||
- A counter of the number of transmit attempts that resulted in the
|
||||
Arbitration Lost error. This is only set if the hardware supports
|
||||
this, otherwise it is always 0. This counter is only valid if the
|
||||
:ref:`CEC_TX_STATUS_ARB_LOST <CEC-TX-STATUS-ARB-LOST>` status bit is set.
|
||||
|
||||
- .. row 12
|
||||
|
||||
- __u8
|
||||
|
||||
- ``tx_nack_cnt``
|
||||
|
||||
- A counter of the number of transmit attempts that resulted in the
|
||||
Not Acknowledged error. This is only set if the hardware supports
|
||||
this, otherwise it is always 0. This counter is only valid if the
|
||||
:ref:`CEC_TX_STATUS_NACK <CEC-TX-STATUS-NACK>` status bit is set.
|
||||
|
||||
- .. row 13
|
||||
|
||||
- __u8
|
||||
|
||||
- ``tx_low_drive_cnt``
|
||||
|
||||
- A counter of the number of transmit attempts that resulted in the
|
||||
Arbitration Lost error. This is only set if the hardware supports
|
||||
this, otherwise it is always 0. This counter is only valid if the
|
||||
:ref:`CEC_TX_STATUS_LOW_DRIVE <CEC-TX-STATUS-LOW-DRIVE>` status bit is set.
|
||||
|
||||
- .. row 14
|
||||
|
||||
- __u8
|
||||
|
||||
- ``tx_error_cnt``
|
||||
|
||||
- A counter of the number of transmit errors other than Arbitration
|
||||
Lost or Not Acknowledged. This is only set if the hardware
|
||||
supports this, otherwise it is always 0. This counter is only
|
||||
valid if the :ref:`CEC_TX_STATUS_ERROR <CEC-TX-STATUS-ERROR>` status bit is set.
|
||||
- ``CEC_MSG_FL_REPLY_TO_FOLLOWERS``
|
||||
- 1
|
||||
- If a CEC transmit expects a reply, then by default that reply is only sent to
|
||||
the filehandle that called :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>`. If this
|
||||
flag is set, then the reply is also sent to all followers, if any. If the
|
||||
filehandle that called :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>` is also a
|
||||
follower, then that filehandle will receive the reply twice: once as the
|
||||
result of the :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>`, and once via
|
||||
:ref:`ioctl CEC_RECEIVE <CEC_RECEIVE>`.
|
||||
|
||||
|
||||
.. tabularcolumns:: |p{5.6cm}|p{0.9cm}|p{11.0cm}|
|
||||
|
@ -264,64 +217,46 @@ result.
|
|||
:stub-columns: 0
|
||||
:widths: 3 1 16
|
||||
|
||||
* .. _`CEC-TX-STATUS-OK`:
|
||||
|
||||
- .. _`CEC-TX-STATUS-OK`:
|
||||
- ``CEC_TX_STATUS_OK``
|
||||
- 0x01
|
||||
- The message was transmitted successfully. This is mutually
|
||||
exclusive with :ref:`CEC_TX_STATUS_MAX_RETRIES <CEC-TX-STATUS-MAX-RETRIES>`. Other bits can still
|
||||
be set if earlier attempts met with failure before the transmit
|
||||
was eventually successful.
|
||||
* .. _`CEC-TX-STATUS-ARB-LOST`:
|
||||
|
||||
- ``CEC_TX_STATUS_OK``
|
||||
- ``CEC_TX_STATUS_ARB_LOST``
|
||||
- 0x02
|
||||
- CEC line arbitration was lost.
|
||||
* .. _`CEC-TX-STATUS-NACK`:
|
||||
|
||||
- 0x01
|
||||
- ``CEC_TX_STATUS_NACK``
|
||||
- 0x04
|
||||
- Message was not acknowledged.
|
||||
* .. _`CEC-TX-STATUS-LOW-DRIVE`:
|
||||
|
||||
- The message was transmitted successfully. This is mutually
|
||||
exclusive with :ref:`CEC_TX_STATUS_MAX_RETRIES <CEC-TX-STATUS-MAX-RETRIES>`. Other bits can still
|
||||
be set if earlier attempts met with failure before the transmit
|
||||
was eventually successful.
|
||||
- ``CEC_TX_STATUS_LOW_DRIVE``
|
||||
- 0x08
|
||||
- Low drive was detected on the CEC bus. This indicates that a
|
||||
follower detected an error on the bus and requests a
|
||||
retransmission.
|
||||
* .. _`CEC-TX-STATUS-ERROR`:
|
||||
|
||||
- .. _`CEC-TX-STATUS-ARB-LOST`:
|
||||
- ``CEC_TX_STATUS_ERROR``
|
||||
- 0x10
|
||||
- Some error occurred. This is used for any errors that do not fit
|
||||
the previous two, either because the hardware could not tell which
|
||||
error occurred, or because the hardware tested for other
|
||||
conditions besides those two.
|
||||
* .. _`CEC-TX-STATUS-MAX-RETRIES`:
|
||||
|
||||
- ``CEC_TX_STATUS_ARB_LOST``
|
||||
|
||||
- 0x02
|
||||
|
||||
- CEC line arbitration was lost.
|
||||
|
||||
- .. _`CEC-TX-STATUS-NACK`:
|
||||
|
||||
- ``CEC_TX_STATUS_NACK``
|
||||
|
||||
- 0x04
|
||||
|
||||
- Message was not acknowledged.
|
||||
|
||||
- .. _`CEC-TX-STATUS-LOW-DRIVE`:
|
||||
|
||||
- ``CEC_TX_STATUS_LOW_DRIVE``
|
||||
|
||||
- 0x08
|
||||
|
||||
- Low drive was detected on the CEC bus. This indicates that a
|
||||
follower detected an error on the bus and requests a
|
||||
retransmission.
|
||||
|
||||
- .. _`CEC-TX-STATUS-ERROR`:
|
||||
|
||||
- ``CEC_TX_STATUS_ERROR``
|
||||
|
||||
- 0x10
|
||||
|
||||
- Some error occurred. This is used for any errors that do not fit
|
||||
the previous two, either because the hardware could not tell which
|
||||
error occurred, or because the hardware tested for other
|
||||
conditions besides those two.
|
||||
|
||||
- .. _`CEC-TX-STATUS-MAX-RETRIES`:
|
||||
|
||||
- ``CEC_TX_STATUS_MAX_RETRIES``
|
||||
|
||||
- 0x20
|
||||
|
||||
- The transmit failed after one or more retries. This status bit is
|
||||
mutually exclusive with :ref:`CEC_TX_STATUS_OK <CEC-TX-STATUS-OK>`. Other bits can still
|
||||
be set to explain which failures were seen.
|
||||
- ``CEC_TX_STATUS_MAX_RETRIES``
|
||||
- 0x20
|
||||
- The transmit failed after one or more retries. This status bit is
|
||||
mutually exclusive with :ref:`CEC_TX_STATUS_OK <CEC-TX-STATUS-OK>`. Other bits can still
|
||||
be set to explain which failures were seen.
|
||||
|
||||
|
||||
.. tabularcolumns:: |p{5.6cm}|p{0.9cm}|p{11.0cm}|
|
||||
|
@ -333,32 +268,23 @@ result.
|
|||
:stub-columns: 0
|
||||
:widths: 3 1 16
|
||||
|
||||
* .. _`CEC-RX-STATUS-OK`:
|
||||
|
||||
- .. _`CEC-RX-STATUS-OK`:
|
||||
- ``CEC_RX_STATUS_OK``
|
||||
- 0x01
|
||||
- The message was received successfully.
|
||||
* .. _`CEC-RX-STATUS-TIMEOUT`:
|
||||
|
||||
- ``CEC_RX_STATUS_OK``
|
||||
- ``CEC_RX_STATUS_TIMEOUT``
|
||||
- 0x02
|
||||
- The reply to an earlier transmitted message timed out.
|
||||
* .. _`CEC-RX-STATUS-FEATURE-ABORT`:
|
||||
|
||||
- 0x01
|
||||
|
||||
- The message was received successfully.
|
||||
|
||||
- .. _`CEC-RX-STATUS-TIMEOUT`:
|
||||
|
||||
- ``CEC_RX_STATUS_TIMEOUT``
|
||||
|
||||
- 0x02
|
||||
|
||||
- The reply to an earlier transmitted message timed out.
|
||||
|
||||
- .. _`CEC-RX-STATUS-FEATURE-ABORT`:
|
||||
|
||||
- ``CEC_RX_STATUS_FEATURE_ABORT``
|
||||
|
||||
- 0x04
|
||||
|
||||
- The message was received successfully but the reply was
|
||||
``CEC_MSG_FEATURE_ABORT``. This status is only set if this message
|
||||
was the reply to an earlier transmitted message.
|
||||
- ``CEC_RX_STATUS_FEATURE_ABORT``
|
||||
- 0x04
|
||||
- The message was received successfully but the reply was
|
||||
``CEC_MSG_FEATURE_ABORT``. This status is only set if this message
|
||||
was the reply to an earlier transmitted message.
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -312,21 +312,20 @@ more menu type controls.
|
|||
|
||||
.. _enum_all_controls:
|
||||
|
||||
Example: Enumerating all user controls
|
||||
======================================
|
||||
Example: Enumerating all controls
|
||||
=================================
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
|
||||
struct v4l2_queryctrl queryctrl;
|
||||
struct v4l2_querymenu querymenu;
|
||||
|
||||
static void enumerate_menu(void)
|
||||
static void enumerate_menu(__u32 id)
|
||||
{
|
||||
printf(" Menu items:\\n");
|
||||
|
||||
memset(&querymenu, 0, sizeof(querymenu));
|
||||
querymenu.id = queryctrl.id;
|
||||
querymenu.id = id;
|
||||
|
||||
for (querymenu.index = queryctrl.minimum;
|
||||
querymenu.index <= queryctrl.maximum;
|
||||
|
@ -337,6 +336,55 @@ Example: Enumerating all user controls
|
|||
}
|
||||
}
|
||||
|
||||
memset(&queryctrl, 0, sizeof(queryctrl));
|
||||
|
||||
queryctrl.id = V4L2_CTRL_FLAG_NEXT_CTRL;
|
||||
while (0 == ioctl(fd, VIDIOC_QUERYCTRL, &queryctrl)) {
|
||||
if (!(queryctrl.flags & V4L2_CTRL_FLAG_DISABLED)) {
|
||||
printf("Control %s\\n", queryctrl.name);
|
||||
|
||||
if (queryctrl.type == V4L2_CTRL_TYPE_MENU)
|
||||
enumerate_menu(queryctrl.id);
|
||||
}
|
||||
|
||||
queryctrl.id |= V4L2_CTRL_FLAG_NEXT_CTRL;
|
||||
}
|
||||
if (errno != EINVAL) {
|
||||
perror("VIDIOC_QUERYCTRL");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
Example: Enumerating all controls including compound controls
|
||||
=============================================================
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
struct v4l2_query_ext_ctrl query_ext_ctrl;
|
||||
|
||||
memset(&query_ext_ctrl, 0, sizeof(query_ext_ctrl));
|
||||
|
||||
query_ext_ctrl.id = V4L2_CTRL_FLAG_NEXT_CTRL | V4L2_CTRL_FLAG_NEXT_COMPOUND;
|
||||
while (0 == ioctl(fd, VIDIOC_QUERY_EXT_CTRL, &query_ext_ctrl)) {
|
||||
if (!(query_ext_ctrl.flags & V4L2_CTRL_FLAG_DISABLED)) {
|
||||
printf("Control %s\\n", query_ext_ctrl.name);
|
||||
|
||||
if (query_ext_ctrl.type == V4L2_CTRL_TYPE_MENU)
|
||||
enumerate_menu(query_ext_ctrl.id);
|
||||
}
|
||||
|
||||
query_ext_ctrl.id |= V4L2_CTRL_FLAG_NEXT_CTRL | V4L2_CTRL_FLAG_NEXT_COMPOUND;
|
||||
}
|
||||
if (errno != EINVAL) {
|
||||
perror("VIDIOC_QUERY_EXT_CTRL");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
Example: Enumerating all user controls (old style)
|
||||
==================================================
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
|
||||
memset(&queryctrl, 0, sizeof(queryctrl));
|
||||
|
||||
for (queryctrl.id = V4L2_CID_BASE;
|
||||
|
@ -349,7 +397,7 @@ Example: Enumerating all user controls
|
|||
printf("Control %s\\n", queryctrl.name);
|
||||
|
||||
if (queryctrl.type == V4L2_CTRL_TYPE_MENU)
|
||||
enumerate_menu();
|
||||
enumerate_menu(queryctrl.id);
|
||||
} else {
|
||||
if (errno == EINVAL)
|
||||
continue;
|
||||
|
@ -368,7 +416,7 @@ Example: Enumerating all user controls
|
|||
printf("Control %s\\n", queryctrl.name);
|
||||
|
||||
if (queryctrl.type == V4L2_CTRL_TYPE_MENU)
|
||||
enumerate_menu();
|
||||
enumerate_menu(queryctrl.id);
|
||||
} else {
|
||||
if (errno == EINVAL)
|
||||
break;
|
||||
|
@ -379,32 +427,6 @@ Example: Enumerating all user controls
|
|||
}
|
||||
|
||||
|
||||
Example: Enumerating all user controls (alternative)
|
||||
====================================================
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
memset(&queryctrl, 0, sizeof(queryctrl));
|
||||
|
||||
queryctrl.id = V4L2_CTRL_CLASS_USER | V4L2_CTRL_FLAG_NEXT_CTRL;
|
||||
while (0 == ioctl(fd, VIDIOC_QUERYCTRL, &queryctrl)) {
|
||||
if (V4L2_CTRL_ID2CLASS(queryctrl.id) != V4L2_CTRL_CLASS_USER)
|
||||
break;
|
||||
if (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED)
|
||||
continue;
|
||||
|
||||
printf("Control %s\\n", queryctrl.name);
|
||||
|
||||
if (queryctrl.type == V4L2_CTRL_TYPE_MENU)
|
||||
enumerate_menu();
|
||||
|
||||
queryctrl.id |= V4L2_CTRL_FLAG_NEXT_CTRL;
|
||||
}
|
||||
if (errno != EINVAL) {
|
||||
perror("VIDIOC_QUERYCTRL");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
Example: Changing controls
|
||||
==========================
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ parameters
|
|||
The MPEG controls actually support many more codecs than
|
||||
just MPEG. See :ref:`mpeg-controls`.
|
||||
|
||||
Memory-to-memory devices can often be used as a shared resource: you can
|
||||
Memory-to-memory devices function 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
|
||||
|
|
|
@ -2846,7 +2846,7 @@ JPEG Control IDs
|
|||
input image is sampled, in respect to maximum sample rate in each
|
||||
spatial dimension. See :ref:`itu-t81`, clause A.1.1. for more
|
||||
details. The ``V4L2_CID_JPEG_CHROMA_SUBSAMPLING`` control determines
|
||||
how Cb and Cr components are downsampled after coverting an input
|
||||
how Cb and Cr components are downsampled after converting an input
|
||||
image from RGB to Y'CbCr color space.
|
||||
|
||||
.. tabularcolumns:: |p{7.0cm}|p{10.5cm}|
|
||||
|
@ -3017,6 +3017,10 @@ Image Process Control IDs
|
|||
test pattern images. These hardware specific test patterns can be
|
||||
used to test if a device is working properly.
|
||||
|
||||
``V4L2_CID_DEINTERLACING_MODE (menu)``
|
||||
The video deinterlacing mode (such as Bob, Weave, ...). The menu items are
|
||||
driver specific and are documented in :ref:`v4l-drivers`.
|
||||
|
||||
|
||||
.. _dv-controls:
|
||||
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _hsv-formats:
|
||||
|
||||
***********
|
||||
HSV Formats
|
||||
***********
|
||||
|
||||
These formats store the color information of the image
|
||||
in a geometrical representation. The colors are mapped into a
|
||||
cylinder, where the angle is the HUE, the height is the VALUE
|
||||
and the distance to the center is the SATURATION. This is a very
|
||||
useful format for image segmentation algorithms.
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
pixfmt-packed-hsv
|
|
@ -121,6 +121,11 @@ Single-planar format structure
|
|||
- This information supplements the ``colorspace`` and must be set by
|
||||
the driver for capture streams and by the application for output
|
||||
streams, see :ref:`colorspaces`.
|
||||
* - enum :c:type:`v4l2_hsv_encoding`
|
||||
- ``hsv_enc``
|
||||
- This information supplements the ``colorspace`` and must be set by
|
||||
the driver for capture streams and by the application for output
|
||||
streams, see :ref:`colorspaces`.
|
||||
* - enum :c:type:`v4l2_quantization`
|
||||
- ``quantization``
|
||||
- This information supplements the ``colorspace`` and must be set by
|
||||
|
|
|
@ -78,6 +78,11 @@ describing all planes of that format.
|
|||
- This information supplements the ``colorspace`` and must be set by
|
||||
the driver for capture streams and by the application for output
|
||||
streams, see :ref:`colorspaces`.
|
||||
* - enum :c:type:`v4l2_hsv_encoding`
|
||||
- ``hsv_enc``
|
||||
- This information supplements the ``colorspace`` and must be set by
|
||||
the driver for capture streams and by the application for output
|
||||
streams, see :ref:`colorspaces`.
|
||||
* - enum :c:type:`v4l2_quantization`
|
||||
- ``quantization``
|
||||
- This information supplements the ``colorspace`` and must be set by
|
||||
|
|
|
@ -19,9 +19,16 @@ colorspace field of struct :c:type:`v4l2_pix_format`
|
|||
or struct :c:type:`v4l2_pix_format_mplane`
|
||||
needs to be filled in.
|
||||
|
||||
.. note::
|
||||
.. _hsv-colorspace:
|
||||
|
||||
The default R'G'B' quantization is full range for all
|
||||
On :ref:`HSV formats <hsv-formats>` the *Hue* is defined as the angle on
|
||||
the cylindrical color representation. Usually this angle is measured in
|
||||
degrees, i.e. 0-360. When we map this angle value into 8 bits, there are
|
||||
two basic ways to do it: Divide the angular value by 2 (0-179), or use the
|
||||
whole range, 0-255, dividing the angular value by 1.41. The enum
|
||||
:c:type:`v4l2_hsv_encoding` specifies which encoding is used.
|
||||
|
||||
.. note:: The default R'G'B' quantization is full range for all
|
||||
colorspaces except for BT.2020 which uses limited range R'G'B'
|
||||
quantization.
|
||||
|
||||
|
@ -123,6 +130,24 @@ needs to be filled in.
|
|||
|
||||
|
||||
|
||||
.. c:type:: v4l2_hsv_encoding
|
||||
|
||||
.. tabularcolumns:: |p{6.5cm}|p{11.0cm}|
|
||||
|
||||
.. flat-table:: V4L2 HSV Encodings
|
||||
:header-rows: 1
|
||||
:stub-columns: 0
|
||||
|
||||
* - Identifier
|
||||
- Details
|
||||
* - ``V4L2_HSV_ENC_180``
|
||||
- For the Hue, each LSB is two degrees.
|
||||
* - ``V4L2_HSV_ENC_256``
|
||||
- For the Hue, the 360 degrees are mapped into 8 bits, i.e. each
|
||||
LSB is roughly 1.41 degrees.
|
||||
|
||||
|
||||
|
||||
.. c:type:: v4l2_quantization
|
||||
|
||||
.. tabularcolumns:: |p{6.5cm}|p{11.0cm}|
|
||||
|
@ -136,7 +161,7 @@ needs to be filled in.
|
|||
* - ``V4L2_QUANTIZATION_DEFAULT``
|
||||
- Use the default quantization encoding as defined by the
|
||||
colorspace. This is always full range for R'G'B' (except for the
|
||||
BT.2020 colorspace) and usually limited range for Y'CbCr.
|
||||
BT.2020 colorspace) and HSV. It is usually limited range for Y'CbCr.
|
||||
* - ``V4L2_QUANTIZATION_FULL_RANGE``
|
||||
- Use the full range quantization encoding. I.e. the range [0…1] is
|
||||
mapped to [0…255] (with possible clipping to [1…254] to avoid the
|
||||
|
|
|
@ -85,3 +85,8 @@ Compressed Formats
|
|||
- ``V4L2_PIX_FMT_VP8``
|
||||
- 'VP80'
|
||||
- VP8 video elementary stream.
|
||||
* .. _V4L2-PIX-FMT-VP9:
|
||||
|
||||
- ``V4L2_PIX_FMT_VP9``
|
||||
- 'VP90'
|
||||
- VP9 video elementary stream.
|
||||
|
|
|
@ -0,0 +1,157 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _packed-hsv:
|
||||
|
||||
******************
|
||||
Packed HSV formats
|
||||
******************
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The *hue* (h) is measured in degrees, the equivalence between degrees and LSBs
|
||||
depends on the hsv-encoding used, see :ref:`colorspaces`.
|
||||
The *saturation* (s) and the *value* (v) are measured in percentage of the
|
||||
cylinder: 0 being the smallest value and 255 the maximum.
|
||||
|
||||
|
||||
The values are packed in 24 or 32 bit formats.
|
||||
|
||||
.. raw:: latex
|
||||
|
||||
\newline\begin{adjustbox}{width=\columnwidth}
|
||||
|
||||
.. tabularcolumns:: |p{4.2cm}|p{1.0cm}|p{0.7cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.2cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.2cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.2cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{0.4cm}|p{1.7cm}|
|
||||
|
||||
.. _packed-hsv-formats:
|
||||
|
||||
.. flat-table:: Packed HSV Image Formats
|
||||
:header-rows: 2
|
||||
:stub-columns: 0
|
||||
|
||||
* - Identifier
|
||||
- Code
|
||||
-
|
||||
- :cspan:`7` Byte 0 in memory
|
||||
-
|
||||
- :cspan:`7` Byte 1
|
||||
-
|
||||
- :cspan:`7` Byte 2
|
||||
-
|
||||
- :cspan:`7` Byte 3
|
||||
* -
|
||||
-
|
||||
- Bit
|
||||
- 7
|
||||
- 6
|
||||
- 5
|
||||
- 4
|
||||
- 3
|
||||
- 2
|
||||
- 1
|
||||
- 0
|
||||
-
|
||||
- 7
|
||||
- 6
|
||||
- 5
|
||||
- 4
|
||||
- 3
|
||||
- 2
|
||||
- 1
|
||||
- 0
|
||||
-
|
||||
- 7
|
||||
- 6
|
||||
- 5
|
||||
- 4
|
||||
- 3
|
||||
- 2
|
||||
- 1
|
||||
- 0
|
||||
-
|
||||
- 7
|
||||
- 6
|
||||
- 5
|
||||
- 4
|
||||
- 3
|
||||
- 2
|
||||
- 1
|
||||
- 0
|
||||
* .. _V4L2-PIX-FMT-HSV32:
|
||||
|
||||
- ``V4L2_PIX_FMT_HSV32``
|
||||
- 'HSV4'
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
- h\ :sub:`7`
|
||||
- h\ :sub:`6`
|
||||
- h\ :sub:`5`
|
||||
- h\ :sub:`4`
|
||||
- h\ :sub:`3`
|
||||
- h\ :sub:`2`
|
||||
- h\ :sub:`1`
|
||||
- h\ :sub:`0`
|
||||
-
|
||||
- s\ :sub:`7`
|
||||
- s\ :sub:`6`
|
||||
- s\ :sub:`5`
|
||||
- s\ :sub:`4`
|
||||
- s\ :sub:`3`
|
||||
- s\ :sub:`2`
|
||||
- s\ :sub:`1`
|
||||
- s\ :sub:`0`
|
||||
-
|
||||
- v\ :sub:`7`
|
||||
- v\ :sub:`6`
|
||||
- v\ :sub:`5`
|
||||
- v\ :sub:`4`
|
||||
- v\ :sub:`3`
|
||||
- v\ :sub:`2`
|
||||
- v\ :sub:`1`
|
||||
- v\ :sub:`0`
|
||||
* .. _V4L2-PIX-FMT-HSV24:
|
||||
|
||||
- ``V4L2_PIX_FMT_HSV24``
|
||||
- 'HSV3'
|
||||
-
|
||||
- h\ :sub:`7`
|
||||
- h\ :sub:`6`
|
||||
- h\ :sub:`5`
|
||||
- h\ :sub:`4`
|
||||
- h\ :sub:`3`
|
||||
- h\ :sub:`2`
|
||||
- h\ :sub:`1`
|
||||
- h\ :sub:`0`
|
||||
-
|
||||
- s\ :sub:`7`
|
||||
- s\ :sub:`6`
|
||||
- s\ :sub:`5`
|
||||
- s\ :sub:`4`
|
||||
- s\ :sub:`3`
|
||||
- s\ :sub:`2`
|
||||
- s\ :sub:`1`
|
||||
- s\ :sub:`0`
|
||||
-
|
||||
- v\ :sub:`7`
|
||||
- v\ :sub:`6`
|
||||
- v\ :sub:`5`
|
||||
- v\ :sub:`4`
|
||||
- v\ :sub:`3`
|
||||
- v\ :sub:`2`
|
||||
- v\ :sub:`1`
|
||||
- v\ :sub:`0`
|
||||
-
|
||||
-
|
||||
.. raw:: latex
|
||||
|
||||
\end{adjustbox}\newline\newline
|
||||
|
||||
Bit 7 is the most significant bit.
|
|
@ -234,7 +234,15 @@ please make a proposal on the linux-media mailing list.
|
|||
repeated for each line, i.e. the number of entries in the pointer
|
||||
array. Anything what's in between the UYVY lines is JPEG data and
|
||||
should be concatenated to form the JPEG stream.
|
||||
* .. _V4L2-PIX-FMT-MT21C:
|
||||
|
||||
- ``V4L2_PIX_FMT_MT21C``
|
||||
- 'MT21'
|
||||
- Compressed two-planar YVU420 format used by Mediatek MT8173.
|
||||
The compression is lossless.
|
||||
It is an opaque intermediate format and the MDP hardware must be
|
||||
used to convert ``V4L2_PIX_FMT_MT21C`` to ``V4L2_PIX_FMT_NV12M``,
|
||||
``V4L2_PIX_FMT_YUV420M`` or ``V4L2_PIX_FMT_YVU420``.
|
||||
|
||||
|
||||
.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}|
|
||||
|
|
|
@ -12,9 +12,9 @@ RGB Formats
|
|||
|
||||
pixfmt-packed-rgb
|
||||
pixfmt-srggb8
|
||||
pixfmt-sbggr16
|
||||
pixfmt-srggb10
|
||||
pixfmt-srggb10p
|
||||
pixfmt-srggb10alaw8
|
||||
pixfmt-srggb10dpcm8
|
||||
pixfmt-srggb12
|
||||
pixfmt-srggb16
|
||||
|
|
|
@ -28,7 +28,7 @@ bits of each pixel, in the same order.
|
|||
Each n-pixel row contains n/2 green samples and n/2 blue or red samples,
|
||||
with alternating green-red and green-blue rows. They are conventionally
|
||||
described as GRGR... BGBG..., RGRG... GBGB..., etc. Below is an example
|
||||
of one of these formats:
|
||||
of a small V4L2_PIX_FMT_SBGGR10P image:
|
||||
|
||||
**Byte Order.**
|
||||
Each cell is one byte.
|
||||
|
|
|
@ -26,7 +26,7 @@ high bits filled with zeros. Each n-pixel row contains n/2 green samples
|
|||
and n/2 blue or red samples, with alternating red and blue rows. Bytes
|
||||
are stored in memory in little endian order. They are conventionally
|
||||
described as GRGR... BGBG..., RGRG... GBGB..., etc. Below is an example
|
||||
of one of these formats:
|
||||
of a small V4L2_PIX_FMT_SBGGR12 image:
|
||||
|
||||
**Byte Order.**
|
||||
Each cell is one byte, the 4 most significant bits in the high bytes are
|
||||
|
|
|
@ -1,21 +1,28 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _V4L2-PIX-FMT-SBGGR16:
|
||||
.. _V4L2-PIX-FMT-SRGGB16:
|
||||
.. _v4l2-pix-fmt-sbggr16:
|
||||
.. _v4l2-pix-fmt-sgbrg16:
|
||||
.. _v4l2-pix-fmt-sgrbg16:
|
||||
|
||||
*****************************
|
||||
V4L2_PIX_FMT_SBGGR16 ('BYR2')
|
||||
*****************************
|
||||
|
||||
Bayer RGB format
|
||||
***************************************************************************************************************************
|
||||
V4L2_PIX_FMT_SRGGB16 ('RG16'), V4L2_PIX_FMT_SGRBG16 ('GR16'), V4L2_PIX_FMT_SGBRG16 ('GB16'), V4L2_PIX_FMT_SBGGR16 ('BYR2'),
|
||||
***************************************************************************************************************************
|
||||
|
||||
|
||||
16-bit Bayer formats
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
This format is similar to
|
||||
:ref:`V4L2_PIX_FMT_SBGGR8 <V4L2-PIX-FMT-SBGGR8>`, except each pixel
|
||||
has a depth of 16 bits. The least significant byte is stored at lower
|
||||
memory addresses (little-endian).
|
||||
These four pixel formats are raw sRGB / Bayer formats with 16 bits per
|
||||
sample. Each sample is stored in a 16-bit word. Each n-pixel row contains
|
||||
n/2 green samples and n/2 blue or red samples, with alternating red and blue
|
||||
rows. Bytes are stored in memory in little endian order. They are
|
||||
conventionally described as GRGR... BGBG..., RGRG... GBGB..., etc. Below is
|
||||
an example of a small V4L2_PIX_FMT_SBGGR16 image:
|
||||
|
||||
**Byte Order.**
|
||||
Each cell is one byte.
|
|
@ -20,7 +20,7 @@ These four pixel formats are raw sRGB / Bayer formats with 8 bits per
|
|||
sample. Each sample is stored in a byte. Each n-pixel row contains n/2
|
||||
green samples and n/2 blue or red samples, with alternating red and
|
||||
blue rows. They are conventionally described as GRGR... BGBG...,
|
||||
RGRG... GBGB..., etc. Below is an example of one of these formats:
|
||||
RGRG... GBGB..., etc. Below is an example of a small V4L2_PIX_FMT_SBGGR8 image:
|
||||
|
||||
**Byte Order.**
|
||||
Each cell is one byte.
|
||||
|
|
|
@ -29,6 +29,7 @@ see also :ref:`VIDIOC_G_FBUF <VIDIOC_G_FBUF>`.)
|
|||
pixfmt-indexed
|
||||
pixfmt-rgb
|
||||
yuv-formats
|
||||
hsv-formats
|
||||
depth-formats
|
||||
pixfmt-013
|
||||
sdr-formats
|
||||
|
|
|
@ -7,9 +7,9 @@
|
|||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="43cm"
|
||||
height="10cm"
|
||||
viewBox="-194 128 844 196"
|
||||
width="42.799767cm"
|
||||
height="9.9348345cm"
|
||||
viewBox="-194 128 840.06984 194.72276"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
|
@ -22,6 +22,7 @@
|
|||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
|
@ -40,23 +41,27 @@
|
|||
inkscape:window-height="997"
|
||||
id="namedview96"
|
||||
showgrid="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="0.3649199"
|
||||
inkscape:cx="767.29168"
|
||||
inkscape:cy="177.16535"
|
||||
inkscape:cx="764.40286"
|
||||
inkscape:cy="176.91347"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2" />
|
||||
<rect
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#000000"
|
||||
x="-8"
|
||||
y="130"
|
||||
width="469.774"
|
||||
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
|
||||
x="-9.6002426"
|
||||
y="128.86047"
|
||||
width="469.77399"
|
||||
height="193"
|
||||
id="rect4" />
|
||||
<g
|
||||
id="g6"
|
||||
style="">
|
||||
transform="translate(-1.6002426,-1.1395339)">
|
||||
<rect
|
||||
style="fill:#ffffff"
|
||||
x="4.5"
|
||||
|
@ -65,7 +70,7 @@
|
|||
height="104"
|
||||
id="rect8" />
|
||||
<rect
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#a52a2a"
|
||||
style="fill:none;fill-opacity:0;stroke:#a52a2a;stroke-width:2"
|
||||
x="4.5"
|
||||
y="189"
|
||||
width="159"
|
||||
|
@ -74,7 +79,7 @@
|
|||
</g>
|
||||
<g
|
||||
id="g12"
|
||||
style="">
|
||||
transform="translate(-1.6002426,-1.1395339)">
|
||||
<rect
|
||||
style="fill:#ffffff"
|
||||
x="63.5"
|
||||
|
@ -83,7 +88,7 @@
|
|||
height="77"
|
||||
id="rect14" />
|
||||
<rect
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#0000ff"
|
||||
style="fill:none;fill-opacity:0;stroke:#0000ff;stroke-width:2"
|
||||
x="63.5"
|
||||
y="211"
|
||||
width="94"
|
||||
|
@ -91,223 +96,207 @@
|
|||
id="rect16" />
|
||||
</g>
|
||||
<text
|
||||
style="fill:#0000ff;text-anchor:start;font-size:12.8;font-family:sans-serif;font-style:normal;font-weight:normal;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
x="74.5"
|
||||
y="227.75"
|
||||
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sanserif;text-anchor:start;fill:#0000ff"
|
||||
x="72.899757"
|
||||
y="226.61047"
|
||||
id="text18">
|
||||
<tspan
|
||||
x="74.5"
|
||||
y="227.75"
|
||||
id="tspan20"
|
||||
style="-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;">sink</tspan>
|
||||
x="72.899757"
|
||||
y="226.61047"
|
||||
id="tspan20">sink</tspan>
|
||||
<tspan
|
||||
x="74.5"
|
||||
y="243.75"
|
||||
id="tspan22"
|
||||
style="-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;">crop</tspan>
|
||||
x="72.899757"
|
||||
y="242.61047"
|
||||
id="tspan22">crop</tspan>
|
||||
<tspan
|
||||
x="74.5"
|
||||
y="259.75"
|
||||
id="tspan24"
|
||||
style="-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;">selection</tspan>
|
||||
x="72.899757"
|
||||
y="258.61047"
|
||||
id="tspan24">selection</tspan>
|
||||
</text>
|
||||
<text
|
||||
style="fill:#000000;text-anchor:start;font-size:12.8;font-family:sans-serif;font-style:normal;font-weight:normal;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
x="29.5"
|
||||
y="158"
|
||||
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sanserif;text-anchor:start;fill:#000000"
|
||||
x="27.899757"
|
||||
y="156.86047"
|
||||
id="text26">
|
||||
<tspan
|
||||
x="29.5"
|
||||
y="158"
|
||||
id="tspan28"
|
||||
style="-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;" />
|
||||
x="27.899757"
|
||||
y="156.86047"
|
||||
id="tspan28" />
|
||||
</text>
|
||||
<text
|
||||
style="fill:#a52a2a;text-anchor:start;font-size:12.8;font-family:sans-serif;font-style:normal;font-weight:normal;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
x="8.53836"
|
||||
y="157.914"
|
||||
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sanserif;text-anchor:start;fill:#a52a2a"
|
||||
x="6.938117"
|
||||
y="156.77448"
|
||||
id="text30">
|
||||
<tspan
|
||||
x="8.53836"
|
||||
y="157.914"
|
||||
id="tspan32"
|
||||
style="-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;">sink media</tspan>
|
||||
x="6.938117"
|
||||
y="156.77448"
|
||||
id="tspan32">sink media</tspan>
|
||||
<tspan
|
||||
x="8.53836"
|
||||
y="173.914"
|
||||
id="tspan34"
|
||||
style="-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;">bus format</tspan>
|
||||
x="6.938117"
|
||||
y="172.77448"
|
||||
id="tspan34">bus format</tspan>
|
||||
</text>
|
||||
<text
|
||||
style="fill:#8b6914;text-anchor:start;font-size:12.8;font-family:sans-serif;font-style:normal;font-weight:normal;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
x="349.774"
|
||||
y="155"
|
||||
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sanserif;text-anchor:start;fill:#8b6914"
|
||||
x="348.17374"
|
||||
y="153.86047"
|
||||
id="text36">
|
||||
<tspan
|
||||
x="349.774"
|
||||
y="155"
|
||||
id="tspan38"
|
||||
style="-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;">source media</tspan>
|
||||
x="348.17374"
|
||||
y="153.86047"
|
||||
id="tspan38">source media</tspan>
|
||||
<tspan
|
||||
x="349.774"
|
||||
y="171"
|
||||
id="tspan40"
|
||||
style="-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;">bus format</tspan>
|
||||
x="348.17374"
|
||||
y="169.86047"
|
||||
id="tspan40">bus format</tspan>
|
||||
</text>
|
||||
<g
|
||||
id="g42"
|
||||
style="">
|
||||
transform="translate(-1.6002426,-1.1395339)">
|
||||
<rect
|
||||
style="fill:#ffffff"
|
||||
x="350.488"
|
||||
x="350.48801"
|
||||
y="190.834"
|
||||
width="93.2863"
|
||||
width="93.286301"
|
||||
height="75.166"
|
||||
id="rect44" />
|
||||
<rect
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#8b6914"
|
||||
x="350.488"
|
||||
style="fill:none;fill-opacity:0;stroke:#8b6914;stroke-width:2"
|
||||
x="350.48801"
|
||||
y="190.834"
|
||||
width="93.2863"
|
||||
width="93.286301"
|
||||
height="75.166"
|
||||
id="rect46" />
|
||||
</g>
|
||||
<line
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke-dasharray:4;stroke:#e60505"
|
||||
x1="350.488"
|
||||
y1="266"
|
||||
x2="63.5"
|
||||
y2="288"
|
||||
style="fill:none;fill-opacity:0;stroke:#e60505;stroke-width:2;stroke-dasharray:4"
|
||||
x1="348.88776"
|
||||
y1="264.86047"
|
||||
x2="61.899757"
|
||||
y2="286.86047"
|
||||
id="line48" />
|
||||
<line
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke-dasharray:4;stroke:#e60505"
|
||||
x1="350.488"
|
||||
y1="190.834"
|
||||
x2="63.5"
|
||||
y2="211"
|
||||
style="fill:none;fill-opacity:0;stroke:#e60505;stroke-width:2;stroke-dasharray:4"
|
||||
x1="348.88776"
|
||||
y1="189.69447"
|
||||
x2="61.899757"
|
||||
y2="209.86047"
|
||||
id="line50" />
|
||||
<line
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke-dasharray:4;stroke:#e60505"
|
||||
x1="443.774"
|
||||
y1="266"
|
||||
x2="157.5"
|
||||
y2="288"
|
||||
style="fill:none;fill-opacity:0;stroke:#e60505;stroke-width:2;stroke-dasharray:4"
|
||||
x1="442.17374"
|
||||
y1="264.86047"
|
||||
x2="155.89977"
|
||||
y2="286.86047"
|
||||
id="line52" />
|
||||
<line
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke-dasharray:4;stroke:#e60505"
|
||||
x1="443.774"
|
||||
y1="190.834"
|
||||
x2="157.5"
|
||||
y2="211"
|
||||
style="fill:none;fill-opacity:0;stroke:#e60505;stroke-width:2;stroke-dasharray:4"
|
||||
x1="442.17374"
|
||||
y1="189.69447"
|
||||
x2="155.89977"
|
||||
y2="209.86047"
|
||||
id="line54" />
|
||||
<g
|
||||
id="g56"
|
||||
style="">
|
||||
<ellipse
|
||||
transform="translate(-1.6002426,-1.1395339)">
|
||||
<circle
|
||||
style="fill:#ffffff"
|
||||
cx="473.1"
|
||||
cy="219.984"
|
||||
rx="8.5"
|
||||
ry="8.5"
|
||||
id="ellipse58" />
|
||||
<ellipse
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#000000"
|
||||
cx="473.1"
|
||||
cy="219.984"
|
||||
rx="8.5"
|
||||
ry="8.5"
|
||||
id="ellipse60" />
|
||||
<ellipse
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#000000"
|
||||
cx="473.1"
|
||||
cy="219.984"
|
||||
rx="8.5"
|
||||
ry="8.5"
|
||||
id="ellipse62" />
|
||||
cx="473.10001"
|
||||
cy="219.98399"
|
||||
id="ellipse58"
|
||||
r="8.5" />
|
||||
<circle
|
||||
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
|
||||
cx="473.10001"
|
||||
cy="219.98399"
|
||||
id="ellipse60"
|
||||
r="8.5" />
|
||||
<circle
|
||||
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
|
||||
cx="473.10001"
|
||||
cy="219.98399"
|
||||
id="ellipse62"
|
||||
r="8.5" />
|
||||
</g>
|
||||
<g
|
||||
id="g64"
|
||||
style="">
|
||||
transform="translate(-1.6002426,-1.1395339)">
|
||||
<line
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#000000"
|
||||
x1="481.6"
|
||||
y1="219.984"
|
||||
x2="637.934"
|
||||
y2="220.012"
|
||||
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
|
||||
x1="481.60001"
|
||||
y1="219.98399"
|
||||
x2="637.93402"
|
||||
y2="220.01199"
|
||||
id="line66" />
|
||||
<polygon
|
||||
style="fill:#000000"
|
||||
points="645.434,220.014 635.433,225.012 637.934,220.012 635.435,215.012 "
|
||||
points="635.435,215.012 645.434,220.014 635.433,225.012 637.934,220.012 "
|
||||
id="polygon68" />
|
||||
<polygon
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#000000"
|
||||
points="645.434,220.014 635.433,225.012 637.934,220.012 635.435,215.012 "
|
||||
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
|
||||
points="635.435,215.012 645.434,220.014 635.433,225.012 637.934,220.012 "
|
||||
id="polygon70" />
|
||||
</g>
|
||||
<text
|
||||
style="fill:#000000;text-anchor:start;font-size:12.8;font-family:sans-serif;font-style:normal;font-weight:normal;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
x="506.908"
|
||||
y="209.8"
|
||||
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sanserif;text-anchor:start;fill:#000000"
|
||||
x="505.30774"
|
||||
y="208.66048"
|
||||
id="text72">
|
||||
<tspan
|
||||
x="506.908"
|
||||
y="209.8"
|
||||
id="tspan74"
|
||||
style="-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;">pad 1 (source)</tspan>
|
||||
x="505.30774"
|
||||
y="208.66048"
|
||||
id="tspan74">pad 1 (source)</tspan>
|
||||
</text>
|
||||
<g
|
||||
id="g76"
|
||||
style="">
|
||||
<ellipse
|
||||
transform="translate(-1.6002426,-1.1395339)">
|
||||
<circle
|
||||
style="fill:#ffffff"
|
||||
cx="-20.3982"
|
||||
cy="241.512"
|
||||
rx="8.5"
|
||||
ry="8.5"
|
||||
id="ellipse78" />
|
||||
<ellipse
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#000000"
|
||||
cx="-20.3982"
|
||||
cy="241.512"
|
||||
rx="8.5"
|
||||
ry="8.5"
|
||||
id="ellipse80" />
|
||||
<ellipse
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#000000"
|
||||
cx="-20.3982"
|
||||
cy="241.512"
|
||||
rx="8.5"
|
||||
ry="8.5"
|
||||
id="ellipse82" />
|
||||
cx="-20.398199"
|
||||
cy="241.51199"
|
||||
id="ellipse78"
|
||||
r="8.5" />
|
||||
<circle
|
||||
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
|
||||
cx="-20.398199"
|
||||
cy="241.51199"
|
||||
id="ellipse80"
|
||||
r="8.5" />
|
||||
<circle
|
||||
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
|
||||
cx="-20.398199"
|
||||
cy="241.51199"
|
||||
id="ellipse82"
|
||||
r="8.5" />
|
||||
</g>
|
||||
<g
|
||||
id="g84"
|
||||
style="">
|
||||
transform="translate(-1.6002426,-1.1395339)">
|
||||
<line
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#000000"
|
||||
x1="-192.398"
|
||||
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
|
||||
x1="-192.39799"
|
||||
y1="241.8"
|
||||
x2="-38.6343"
|
||||
y2="241.529"
|
||||
y2="241.52901"
|
||||
id="line86" />
|
||||
<polygon
|
||||
style="fill:#000000"
|
||||
points="-31.1343,241.516 -41.1254,246.534 -38.6343,241.529 -41.1431,236.534 "
|
||||
points="-41.1431,236.534 -31.1343,241.516 -41.1254,246.534 -38.6343,241.529 "
|
||||
id="polygon88" />
|
||||
<polygon
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#000000"
|
||||
points="-31.1343,241.516 -41.1254,246.534 -38.6343,241.529 -41.1431,236.534 "
|
||||
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
|
||||
points="-41.1431,236.534 -31.1343,241.516 -41.1254,246.534 -38.6343,241.529 "
|
||||
id="polygon90" />
|
||||
</g>
|
||||
<text
|
||||
style="fill:#000000;text-anchor:start;font-size:12.8;font-family:sans-serif;font-style:normal;font-weight:normal;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
x="-147.858"
|
||||
y="229.8"
|
||||
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sanserif;text-anchor:start;fill:#000000"
|
||||
x="-149.45824"
|
||||
y="228.66048"
|
||||
id="text92">
|
||||
<tspan
|
||||
x="-147.858"
|
||||
y="229.8"
|
||||
id="tspan94"
|
||||
style="-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;">pad 0 (sink)</tspan>
|
||||
x="-149.45824"
|
||||
y="228.66048"
|
||||
id="tspan94">pad 0 (sink)</tspan>
|
||||
</text>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 7.9 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 20 KiB |
|
@ -7,9 +7,9 @@
|
|||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="59cm"
|
||||
height="17cm"
|
||||
viewBox="-194 128 1179 330"
|
||||
width="58.803326cm"
|
||||
height="16.463955cm"
|
||||
viewBox="-194 128 1175.0698 319.59442"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
|
@ -22,6 +22,7 @@
|
|||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
|
@ -40,23 +41,27 @@
|
|||
inkscape:window-height="997"
|
||||
id="namedview182"
|
||||
showgrid="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="0.26595857"
|
||||
inkscape:cx="1052.7956"
|
||||
inkscape:cy="301.1811"
|
||||
inkscape:cx="1049.9581"
|
||||
inkscape:cy="292.5708"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2" />
|
||||
<rect
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#000000"
|
||||
x="-8"
|
||||
y="130"
|
||||
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
|
||||
x="-9.6002426"
|
||||
y="124.14409"
|
||||
width="806"
|
||||
height="327"
|
||||
id="rect4" />
|
||||
<g
|
||||
id="g6"
|
||||
style="">
|
||||
transform="translate(-1.6002426,-5.8559115)">
|
||||
<rect
|
||||
style="fill:#ffffff"
|
||||
x="4.5"
|
||||
|
@ -65,7 +70,7 @@
|
|||
height="104"
|
||||
id="rect8" />
|
||||
<rect
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#a52a2a"
|
||||
style="fill:none;fill-opacity:0;stroke:#a52a2a;stroke-width:2"
|
||||
x="4.5"
|
||||
y="189"
|
||||
width="159"
|
||||
|
@ -74,7 +79,7 @@
|
|||
</g>
|
||||
<g
|
||||
id="g12"
|
||||
style="">
|
||||
transform="translate(-1.6002426,-5.8559115)">
|
||||
<rect
|
||||
style="fill:#ffffff"
|
||||
x="49.5"
|
||||
|
@ -83,7 +88,7 @@
|
|||
height="77"
|
||||
id="rect14" />
|
||||
<rect
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#0000ff"
|
||||
style="fill:none;fill-opacity:0;stroke:#0000ff;stroke-width:2"
|
||||
x="49.5"
|
||||
y="204"
|
||||
width="94"
|
||||
|
@ -91,470 +96,445 @@
|
|||
id="rect16" />
|
||||
</g>
|
||||
<text
|
||||
style="fill:#0000ff;text-anchor:start;font-size:12.8;font-family:sans-serif;font-style:normal;font-weight:normal;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
x="60"
|
||||
y="224"
|
||||
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sanserif;text-anchor:start;fill:#0000ff"
|
||||
x="58.399757"
|
||||
y="218.14409"
|
||||
id="text18">
|
||||
<tspan
|
||||
x="60"
|
||||
y="224"
|
||||
id="tspan20"
|
||||
style="-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;">sink</tspan>
|
||||
x="58.399757"
|
||||
y="218.14409"
|
||||
id="tspan20">sink</tspan>
|
||||
<tspan
|
||||
x="60"
|
||||
y="240"
|
||||
id="tspan22"
|
||||
style="-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;">crop</tspan>
|
||||
x="58.399757"
|
||||
y="234.14409"
|
||||
id="tspan22">crop</tspan>
|
||||
<tspan
|
||||
x="60"
|
||||
y="256"
|
||||
id="tspan24"
|
||||
style="-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;">selection</tspan>
|
||||
x="58.399757"
|
||||
y="250.14409"
|
||||
id="tspan24">selection</tspan>
|
||||
</text>
|
||||
<text
|
||||
style="fill:#000000;text-anchor:start;font-size:12.8;font-family:sans-serif;font-style:normal;font-weight:normal;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
x="29.5"
|
||||
y="158"
|
||||
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sanserif;text-anchor:start;fill:#000000"
|
||||
x="27.899757"
|
||||
y="152.14409"
|
||||
id="text26">
|
||||
<tspan
|
||||
x="29.5"
|
||||
y="158"
|
||||
id="tspan28"
|
||||
style="-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;" />
|
||||
x="27.899757"
|
||||
y="152.14409"
|
||||
id="tspan28" />
|
||||
</text>
|
||||
<text
|
||||
style="fill:#a52a2a;text-anchor:start;font-size:12.8;font-family:sans-serif;font-style:normal;font-weight:normal;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
x="8.53836"
|
||||
y="157.914"
|
||||
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sanserif;text-anchor:start;fill:#a52a2a"
|
||||
x="6.938117"
|
||||
y="152.05809"
|
||||
id="text30">
|
||||
<tspan
|
||||
x="8.53836"
|
||||
y="157.914"
|
||||
id="tspan32"
|
||||
style="-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;">sink media</tspan>
|
||||
x="6.938117"
|
||||
y="152.05809"
|
||||
id="tspan32">sink media</tspan>
|
||||
<tspan
|
||||
x="8.53836"
|
||||
y="173.914"
|
||||
id="tspan34"
|
||||
style="-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;">bus format</tspan>
|
||||
x="6.938117"
|
||||
y="168.05809"
|
||||
id="tspan34">bus format</tspan>
|
||||
</text>
|
||||
<g
|
||||
id="g36"
|
||||
style="">
|
||||
transform="translate(-1.6002426,-5.8559115)">
|
||||
<rect
|
||||
style="fill:#ffffff"
|
||||
x="333.644"
|
||||
y="185.65"
|
||||
x="333.64401"
|
||||
y="185.64999"
|
||||
width="165.2"
|
||||
height="172.478"
|
||||
id="rect38" />
|
||||
<rect
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#00ff00"
|
||||
x="333.644"
|
||||
y="185.65"
|
||||
style="fill:none;fill-opacity:0;stroke:#00ff00;stroke-width:2"
|
||||
x="333.64401"
|
||||
y="185.64999"
|
||||
width="165.2"
|
||||
height="172.478"
|
||||
id="rect40" />
|
||||
</g>
|
||||
<line
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke-dasharray:4;stroke:#e60505"
|
||||
x1="333.644"
|
||||
y1="358.128"
|
||||
x2="49.5"
|
||||
y2="281"
|
||||
style="fill:none;fill-opacity:0;stroke:#e60505;stroke-width:2;stroke-dasharray:4"
|
||||
x1="332.04376"
|
||||
y1="352.27206"
|
||||
x2="47.899757"
|
||||
y2="275.14407"
|
||||
id="line42" />
|
||||
<line
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke-dasharray:4;stroke:#e60505"
|
||||
x1="333.644"
|
||||
y1="185.65"
|
||||
x2="49.5"
|
||||
y2="204"
|
||||
style="fill:none;fill-opacity:0;stroke:#e60505;stroke-width:2;stroke-dasharray:4"
|
||||
x1="332.04376"
|
||||
y1="179.79408"
|
||||
x2="47.899757"
|
||||
y2="198.14409"
|
||||
id="line44" />
|
||||
<line
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke-dasharray:4;stroke:#e60505"
|
||||
x1="498.844"
|
||||
y1="358.128"
|
||||
x2="143.5"
|
||||
y2="281"
|
||||
style="fill:none;fill-opacity:0;stroke:#e60505;stroke-width:2;stroke-dasharray:4"
|
||||
x1="497.24374"
|
||||
y1="352.27206"
|
||||
x2="141.89977"
|
||||
y2="275.14407"
|
||||
id="line46" />
|
||||
<line
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke-dasharray:4;stroke:#e60505"
|
||||
x1="498.844"
|
||||
y1="185.65"
|
||||
x2="143.5"
|
||||
y2="204"
|
||||
style="fill:none;fill-opacity:0;stroke:#e60505;stroke-width:2;stroke-dasharray:4"
|
||||
x1="497.24374"
|
||||
y1="179.79408"
|
||||
x2="141.89977"
|
||||
y2="198.14409"
|
||||
id="line48" />
|
||||
<text
|
||||
style="fill:#00ff00;text-anchor:start;font-size:12.8;font-family:sans-serif;font-style:normal;font-weight:normal;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
x="334.704"
|
||||
y="149.442"
|
||||
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sanserif;text-anchor:start;fill:#00ff00"
|
||||
x="333.10376"
|
||||
y="143.58609"
|
||||
id="text50">
|
||||
<tspan
|
||||
x="334.704"
|
||||
y="149.442"
|
||||
id="tspan52"
|
||||
style="-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;">sink compose</tspan>
|
||||
x="333.10376"
|
||||
y="143.58609"
|
||||
id="tspan52">sink compose</tspan>
|
||||
<tspan
|
||||
x="334.704"
|
||||
y="165.442"
|
||||
id="tspan54"
|
||||
style="-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;">selection (scaling)</tspan>
|
||||
x="333.10376"
|
||||
y="159.58609"
|
||||
id="tspan54">selection (scaling)</tspan>
|
||||
</text>
|
||||
<g
|
||||
id="g56"
|
||||
style="">
|
||||
transform="translate(-1.6002426,-5.8559115)">
|
||||
<rect
|
||||
style="fill:#ffffff"
|
||||
x="382.322"
|
||||
x="382.32199"
|
||||
y="199.565"
|
||||
width="100.186"
|
||||
height="71.4523"
|
||||
height="71.452301"
|
||||
id="rect58" />
|
||||
<rect
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#a020f0"
|
||||
x="382.322"
|
||||
style="fill:none;fill-opacity:0;stroke:#a020f0;stroke-width:2"
|
||||
x="382.32199"
|
||||
y="199.565"
|
||||
width="100.186"
|
||||
height="71.4523"
|
||||
height="71.452301"
|
||||
id="rect60" />
|
||||
</g>
|
||||
<text
|
||||
style="fill:#a020f0;text-anchor:start;font-size:12.8;font-family:sans-serif;font-style:normal;font-weight:normal;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
x="543.322"
|
||||
y="149.442"
|
||||
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sanserif;text-anchor:start;fill:#a020f0"
|
||||
x="541.7218"
|
||||
y="143.58609"
|
||||
id="text62">
|
||||
<tspan
|
||||
x="543.322"
|
||||
y="149.442"
|
||||
id="tspan64"
|
||||
style="-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;">source</tspan>
|
||||
x="541.7218"
|
||||
y="143.58609"
|
||||
id="tspan64">source</tspan>
|
||||
<tspan
|
||||
x="543.322"
|
||||
y="165.442"
|
||||
id="tspan66"
|
||||
style="-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;">crop</tspan>
|
||||
x="541.7218"
|
||||
y="159.58609"
|
||||
id="tspan66">crop</tspan>
|
||||
<tspan
|
||||
x="543.322"
|
||||
y="181.442"
|
||||
id="tspan68"
|
||||
style="-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;">selection</tspan>
|
||||
x="541.7218"
|
||||
y="175.58609"
|
||||
id="tspan68">selection</tspan>
|
||||
</text>
|
||||
<text
|
||||
style="fill:#8b6914;text-anchor:start;font-size:12.8;font-family:sans-serif;font-style:normal;font-weight:normal;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
x="691.5"
|
||||
y="157.128"
|
||||
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sanserif;text-anchor:start;fill:#8b6914"
|
||||
x="689.89978"
|
||||
y="151.27209"
|
||||
id="text70">
|
||||
<tspan
|
||||
x="691.5"
|
||||
y="157.128"
|
||||
id="tspan72"
|
||||
style="-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;">source media</tspan>
|
||||
x="689.89978"
|
||||
y="151.27209"
|
||||
id="tspan72">source media</tspan>
|
||||
<tspan
|
||||
x="691.5"
|
||||
y="173.128"
|
||||
id="tspan74"
|
||||
style="-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;">bus format</tspan>
|
||||
x="689.89978"
|
||||
y="167.27209"
|
||||
id="tspan74">bus format</tspan>
|
||||
</text>
|
||||
<g
|
||||
id="g76"
|
||||
style="">
|
||||
transform="translate(-1.6002426,-5.8559115)">
|
||||
<rect
|
||||
style="fill:#ffffff"
|
||||
x="690.488"
|
||||
x="690.48798"
|
||||
y="225.834"
|
||||
width="100.186"
|
||||
height="71.4523"
|
||||
height="71.452301"
|
||||
id="rect78" />
|
||||
<rect
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#8b6914"
|
||||
x="690.488"
|
||||
style="fill:none;fill-opacity:0;stroke:#8b6914;stroke-width:2"
|
||||
x="690.48798"
|
||||
y="225.834"
|
||||
width="100.186"
|
||||
height="71.4523"
|
||||
height="71.452301"
|
||||
id="rect80" />
|
||||
</g>
|
||||
<line
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke-dasharray:4;stroke:#e60505"
|
||||
x1="690.488"
|
||||
y1="297.286"
|
||||
x2="382.322"
|
||||
y2="271.018"
|
||||
style="fill:none;fill-opacity:0;stroke:#e60505;stroke-width:2;stroke-dasharray:4"
|
||||
x1="688.88776"
|
||||
y1="291.43008"
|
||||
x2="380.72174"
|
||||
y2="265.16208"
|
||||
id="line82" />
|
||||
<line
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke-dasharray:4;stroke:#e60505"
|
||||
x1="690.488"
|
||||
y1="225.834"
|
||||
x2="382.322"
|
||||
y2="199.565"
|
||||
style="fill:none;fill-opacity:0;stroke:#e60505;stroke-width:2;stroke-dasharray:4"
|
||||
x1="688.88776"
|
||||
y1="219.97809"
|
||||
x2="380.72174"
|
||||
y2="193.70909"
|
||||
id="line84" />
|
||||
<line
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke-dasharray:4;stroke:#e60505"
|
||||
x1="790.674"
|
||||
y1="297.286"
|
||||
x2="482.508"
|
||||
y2="271.018"
|
||||
style="fill:none;fill-opacity:0;stroke:#e60505;stroke-width:2;stroke-dasharray:4"
|
||||
x1="789.07379"
|
||||
y1="291.43008"
|
||||
x2="480.90775"
|
||||
y2="265.16208"
|
||||
id="line86" />
|
||||
<line
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke-dasharray:4;stroke:#e60505"
|
||||
x1="790.674"
|
||||
y1="225.834"
|
||||
x2="482.508"
|
||||
y2="199.565"
|
||||
style="fill:none;fill-opacity:0;stroke:#e60505;stroke-width:2;stroke-dasharray:4"
|
||||
x1="789.07379"
|
||||
y1="219.97809"
|
||||
x2="480.90775"
|
||||
y2="193.70909"
|
||||
id="line88" />
|
||||
<g
|
||||
id="g90"
|
||||
style="">
|
||||
<ellipse
|
||||
transform="translate(-1.6002426,-5.8559115)">
|
||||
<circle
|
||||
style="fill:#ffffff"
|
||||
cx="808.1"
|
||||
cy="249.984"
|
||||
rx="8.5"
|
||||
ry="8.5"
|
||||
id="ellipse92" />
|
||||
<ellipse
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#000000"
|
||||
cx="808.1"
|
||||
cy="249.984"
|
||||
rx="8.5"
|
||||
ry="8.5"
|
||||
id="ellipse94" />
|
||||
<ellipse
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#000000"
|
||||
cx="808.1"
|
||||
cy="249.984"
|
||||
rx="8.5"
|
||||
ry="8.5"
|
||||
id="ellipse96" />
|
||||
cx="808.09998"
|
||||
cy="249.98399"
|
||||
id="ellipse92"
|
||||
r="8.5" />
|
||||
<circle
|
||||
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
|
||||
cx="808.09998"
|
||||
cy="249.98399"
|
||||
id="ellipse94"
|
||||
r="8.5" />
|
||||
<circle
|
||||
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
|
||||
cx="808.09998"
|
||||
cy="249.98399"
|
||||
id="ellipse96"
|
||||
r="8.5" />
|
||||
</g>
|
||||
<g
|
||||
id="g98"
|
||||
style="">
|
||||
transform="translate(-1.6002426,-5.8559115)">
|
||||
<line
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#000000"
|
||||
x1="816.6"
|
||||
y1="249.984"
|
||||
x2="972.934"
|
||||
y2="250.012"
|
||||
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
|
||||
x1="816.59998"
|
||||
y1="249.98399"
|
||||
x2="972.93402"
|
||||
y2="250.01199"
|
||||
id="line100" />
|
||||
<polygon
|
||||
style="fill:#000000"
|
||||
points="980.434,250.014 970.433,255.012 972.934,250.012 970.435,245.012 "
|
||||
points="970.435,245.012 980.434,250.014 970.433,255.012 972.934,250.012 "
|
||||
id="polygon102" />
|
||||
<polygon
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#000000"
|
||||
points="980.434,250.014 970.433,255.012 972.934,250.012 970.435,245.012 "
|
||||
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
|
||||
points="970.435,245.012 980.434,250.014 970.433,255.012 972.934,250.012 "
|
||||
id="polygon104" />
|
||||
</g>
|
||||
<text
|
||||
style="fill:#000000;text-anchor:start;font-size:12.8;font-family:sans-serif;font-style:normal;font-weight:normal;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
x="841.908"
|
||||
y="239.8"
|
||||
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sanserif;text-anchor:start;fill:#000000"
|
||||
x="840.3078"
|
||||
y="233.94409"
|
||||
id="text106">
|
||||
<tspan
|
||||
x="841.908"
|
||||
y="239.8"
|
||||
id="tspan108"
|
||||
style="-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;">pad 1 (source)</tspan>
|
||||
x="840.3078"
|
||||
y="233.94409"
|
||||
id="tspan108">pad 1 (source)</tspan>
|
||||
</text>
|
||||
<g
|
||||
id="g110"
|
||||
style="">
|
||||
<ellipse
|
||||
transform="translate(-1.6002426,-5.8559115)">
|
||||
<circle
|
||||
style="fill:#ffffff"
|
||||
cx="-20.3982"
|
||||
cy="241.512"
|
||||
rx="8.5"
|
||||
ry="8.5"
|
||||
id="ellipse112" />
|
||||
<ellipse
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#000000"
|
||||
cx="-20.3982"
|
||||
cy="241.512"
|
||||
rx="8.5"
|
||||
ry="8.5"
|
||||
id="ellipse114" />
|
||||
<ellipse
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#000000"
|
||||
cx="-20.3982"
|
||||
cy="241.512"
|
||||
rx="8.5"
|
||||
ry="8.5"
|
||||
id="ellipse116" />
|
||||
cx="-20.398199"
|
||||
cy="241.51199"
|
||||
id="ellipse112"
|
||||
r="8.5" />
|
||||
<circle
|
||||
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
|
||||
cx="-20.398199"
|
||||
cy="241.51199"
|
||||
id="ellipse114"
|
||||
r="8.5" />
|
||||
<circle
|
||||
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
|
||||
cx="-20.398199"
|
||||
cy="241.51199"
|
||||
id="ellipse116"
|
||||
r="8.5" />
|
||||
</g>
|
||||
<g
|
||||
id="g118"
|
||||
style="">
|
||||
transform="translate(-1.6002426,-5.8559115)">
|
||||
<line
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#000000"
|
||||
x1="-192.398"
|
||||
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
|
||||
x1="-192.39799"
|
||||
y1="241.8"
|
||||
x2="-38.6343"
|
||||
y2="241.529"
|
||||
y2="241.52901"
|
||||
id="line120" />
|
||||
<polygon
|
||||
style="fill:#000000"
|
||||
points="-31.1343,241.516 -41.1254,246.534 -38.6343,241.529 -41.1431,236.534 "
|
||||
points="-41.1431,236.534 -31.1343,241.516 -41.1254,246.534 -38.6343,241.529 "
|
||||
id="polygon122" />
|
||||
<polygon
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#000000"
|
||||
points="-31.1343,241.516 -41.1254,246.534 -38.6343,241.529 -41.1431,236.534 "
|
||||
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
|
||||
points="-41.1431,236.534 -31.1343,241.516 -41.1254,246.534 -38.6343,241.529 "
|
||||
id="polygon124" />
|
||||
</g>
|
||||
<text
|
||||
style="fill:#000000;text-anchor:start;font-size:12.8;font-family:sans-serif;font-style:normal;font-weight:normal;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
x="-147.858"
|
||||
y="229.8"
|
||||
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sanserif;text-anchor:start;fill:#000000"
|
||||
x="-149.45824"
|
||||
y="223.94409"
|
||||
id="text126">
|
||||
<tspan
|
||||
x="-147.858"
|
||||
y="229.8"
|
||||
id="tspan128"
|
||||
style="-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;">pad 0 (sink)</tspan>
|
||||
x="-149.45824"
|
||||
y="223.94409"
|
||||
id="tspan128">pad 0 (sink)</tspan>
|
||||
</text>
|
||||
<rect
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#a020f0"
|
||||
x="389.822"
|
||||
y="276.666"
|
||||
style="fill:none;fill-opacity:0;stroke:#a020f0;stroke-width:2"
|
||||
x="388.22174"
|
||||
y="270.81006"
|
||||
width="100.186"
|
||||
height="71.4523"
|
||||
height="71.452301"
|
||||
id="rect130" />
|
||||
<g
|
||||
id="g132"
|
||||
style="">
|
||||
transform="translate(-1.6002426,-5.8559115)">
|
||||
<rect
|
||||
style="fill:#ffffff"
|
||||
x="689.988"
|
||||
y="345.934"
|
||||
x="689.98798"
|
||||
y="345.93399"
|
||||
width="100.186"
|
||||
height="71.4523"
|
||||
height="71.452301"
|
||||
id="rect134" />
|
||||
<rect
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#8b6914"
|
||||
x="689.988"
|
||||
y="345.934"
|
||||
style="fill:none;fill-opacity:0;stroke:#8b6914;stroke-width:2"
|
||||
x="689.98798"
|
||||
y="345.93399"
|
||||
width="100.186"
|
||||
height="71.4523"
|
||||
height="71.452301"
|
||||
id="rect136" />
|
||||
</g>
|
||||
<line
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke-dasharray:4;stroke:#e60505"
|
||||
x1="689.988"
|
||||
y1="417.386"
|
||||
x2="389.822"
|
||||
y2="348.118"
|
||||
style="fill:none;fill-opacity:0;stroke:#e60505;stroke-width:2;stroke-dasharray:4"
|
||||
x1="688.38776"
|
||||
y1="411.53006"
|
||||
x2="388.22174"
|
||||
y2="342.26208"
|
||||
id="line138" />
|
||||
<line
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke-dasharray:4;stroke:#e60505"
|
||||
x1="689.988"
|
||||
y1="345.934"
|
||||
x2="389.822"
|
||||
y2="276.666"
|
||||
style="fill:none;fill-opacity:0;stroke:#e60505;stroke-width:2;stroke-dasharray:4"
|
||||
x1="688.38776"
|
||||
y1="340.07806"
|
||||
x2="388.22174"
|
||||
y2="270.81006"
|
||||
id="line140" />
|
||||
<line
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke-dasharray:4;stroke:#e60505"
|
||||
x1="790.174"
|
||||
y1="417.386"
|
||||
x2="490.008"
|
||||
y2="348.118"
|
||||
style="fill:none;fill-opacity:0;stroke:#e60505;stroke-width:2;stroke-dasharray:4"
|
||||
x1="788.57379"
|
||||
y1="411.53006"
|
||||
x2="488.40775"
|
||||
y2="342.26208"
|
||||
id="line142" />
|
||||
<line
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke-dasharray:4;stroke:#e60505"
|
||||
x1="790.174"
|
||||
y1="345.934"
|
||||
x2="490.008"
|
||||
y2="276.666"
|
||||
style="fill:none;fill-opacity:0;stroke:#e60505;stroke-width:2;stroke-dasharray:4"
|
||||
x1="788.57379"
|
||||
y1="340.07806"
|
||||
x2="488.40775"
|
||||
y2="270.81006"
|
||||
id="line144" />
|
||||
<g
|
||||
id="g146"
|
||||
style="">
|
||||
<ellipse
|
||||
transform="translate(-1.6002426,-5.8559115)">
|
||||
<circle
|
||||
style="fill:#ffffff"
|
||||
cx="805.6"
|
||||
cy="384.084"
|
||||
rx="8.5"
|
||||
ry="8.5"
|
||||
id="ellipse148" />
|
||||
<ellipse
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#000000"
|
||||
cx="805.6"
|
||||
cy="384.084"
|
||||
rx="8.5"
|
||||
ry="8.5"
|
||||
id="ellipse150" />
|
||||
<ellipse
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#000000"
|
||||
cx="805.6"
|
||||
cy="384.084"
|
||||
rx="8.5"
|
||||
ry="8.5"
|
||||
id="ellipse152" />
|
||||
cx="805.59998"
|
||||
cy="384.08401"
|
||||
id="ellipse148"
|
||||
r="8.5" />
|
||||
<circle
|
||||
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
|
||||
cx="805.59998"
|
||||
cy="384.08401"
|
||||
id="ellipse150"
|
||||
r="8.5" />
|
||||
<circle
|
||||
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
|
||||
cx="805.59998"
|
||||
cy="384.08401"
|
||||
id="ellipse152"
|
||||
r="8.5" />
|
||||
</g>
|
||||
<g
|
||||
id="g154"
|
||||
style="">
|
||||
transform="translate(-1.6002426,-5.8559115)">
|
||||
<line
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#000000"
|
||||
x1="814.1"
|
||||
y1="384.084"
|
||||
x2="970.434"
|
||||
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
|
||||
x1="814.09998"
|
||||
y1="384.08401"
|
||||
x2="970.43402"
|
||||
y2="384.112"
|
||||
id="line156" />
|
||||
<polygon
|
||||
style="fill:#000000"
|
||||
points="977.934,384.114 967.933,389.112 970.434,384.112 967.935,379.112 "
|
||||
points="967.935,379.112 977.934,384.114 967.933,389.112 970.434,384.112 "
|
||||
id="polygon158" />
|
||||
<polygon
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#000000"
|
||||
points="977.934,384.114 967.933,389.112 970.434,384.112 967.935,379.112 "
|
||||
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
|
||||
points="967.935,379.112 977.934,384.114 967.933,389.112 970.434,384.112 "
|
||||
id="polygon160" />
|
||||
</g>
|
||||
<text
|
||||
style="fill:#000000;text-anchor:start;font-size:12.8;font-family:sans-serif;font-style:normal;font-weight:normal;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
x="839.408"
|
||||
y="373.9"
|
||||
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sanserif;text-anchor:start;fill:#000000"
|
||||
x="837.8078"
|
||||
y="368.04407"
|
||||
id="text162">
|
||||
<tspan
|
||||
x="839.408"
|
||||
y="373.9"
|
||||
id="tspan164"
|
||||
style="-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;">pad 2 (source)</tspan>
|
||||
x="837.8078"
|
||||
y="368.04407"
|
||||
id="tspan164">pad 2 (source)</tspan>
|
||||
</text>
|
||||
<g
|
||||
id="g166"
|
||||
style="">
|
||||
transform="translate(-1.6002426,-5.8559115)">
|
||||
<line
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#a020f0"
|
||||
style="fill:none;fill-opacity:0;stroke:#a020f0;stroke-width:2"
|
||||
x1="546"
|
||||
y1="191"
|
||||
x2="492.157"
|
||||
x2="492.15701"
|
||||
y2="198.263"
|
||||
id="line168" />
|
||||
<polygon
|
||||
style="fill:#a020f0"
|
||||
points="484.724,199.266 493.966,192.974 492.157,198.263 495.303,202.884 "
|
||||
points="495.303,202.884 484.724,199.266 493.966,192.974 492.157,198.263 "
|
||||
id="polygon170" />
|
||||
<polygon
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#a020f0"
|
||||
points="484.724,199.266 493.966,192.974 492.157,198.263 495.303,202.884 "
|
||||
style="fill:none;fill-opacity:0;stroke:#a020f0;stroke-width:2"
|
||||
points="495.303,202.884 484.724,199.266 493.966,192.974 492.157,198.263 "
|
||||
id="polygon172" />
|
||||
</g>
|
||||
<g
|
||||
id="g174"
|
||||
style="">
|
||||
transform="translate(-1.6002426,-5.8559115)">
|
||||
<line
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#a020f0"
|
||||
x1="546.908"
|
||||
y1="190.725"
|
||||
style="fill:none;fill-opacity:0;stroke:#a020f0;stroke-width:2"
|
||||
x1="546.90802"
|
||||
y1="190.72501"
|
||||
x2="495.383"
|
||||
y2="268.548"
|
||||
id="line176" />
|
||||
<polygon
|
||||
style="fill:#a020f0"
|
||||
points="491.242,274.802 492.594,263.703 495.383,268.548 500.932,269.224 "
|
||||
points="500.932,269.224 491.242,274.802 492.594,263.703 495.383,268.548 "
|
||||
id="polygon178" />
|
||||
<polygon
|
||||
style="fill:none;fill-opacity:0;stroke-width:2;stroke:#a020f0"
|
||||
points="491.242,274.802 492.594,263.703 495.383,268.548 500.932,269.224 "
|
||||
style="fill:none;fill-opacity:0;stroke:#a020f0;stroke-width:2"
|
||||
points="500.932,269.224 491.242,274.802 492.594,263.703 495.383,268.548 "
|
||||
id="polygon180" />
|
||||
</g>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 14 KiB |
|
@ -68,6 +68,10 @@ Authors, in alphabetical order:
|
|||
|
||||
- SDR API.
|
||||
|
||||
- Ribalda, Ricardo
|
||||
|
||||
- Introduce HSV formats and other minor changes.
|
||||
|
||||
- Rubli, Martin
|
||||
|
||||
- Designed and documented the VIDIOC_ENUM_FRAMESIZES and VIDIOC_ENUM_FRAMEINTERVALS ioctls.
|
||||
|
@ -89,6 +93,11 @@ part can be used and distributed without restrictions.
|
|||
Revision History
|
||||
****************
|
||||
|
||||
:revision: 4.10 / 2016-07-15 (*rr*)
|
||||
|
||||
Introduce HSV formats.
|
||||
|
||||
|
||||
:revision: 4.5 / 2015-10-29 (*rr*)
|
||||
|
||||
Extend VIDIOC_G_EXT_CTRLS;. Replace ctrl_class with a new union with
|
||||
|
|
|
@ -270,3 +270,14 @@ EBUSY
|
|||
- Some formats like SMPTE-125M have an interlaced signal with a odd
|
||||
total height. For these formats, if this flag is set, the first
|
||||
field has the extra line. Else, it is the second field.
|
||||
* - ``V4L2_DV_FL_HAS_PICTURE_ASPECT``
|
||||
- If set, then the picture_aspect field is valid. Otherwise assume that
|
||||
the pixels are square, so the picture aspect ratio is the same as the
|
||||
width to height ratio.
|
||||
* - ``V4L2_DV_FL_HAS_CEA861_VIC``
|
||||
- If set, then the cea861_vic field is valid and contains the Video
|
||||
Identification Code as per the CEA-861 standard.
|
||||
* - ``V4L2_DV_FL_HAS_HDMI_VIC``
|
||||
- If set, then the hdmi_vic field is valid and contains the Video
|
||||
Identification Code as per the HDMI standard (HDMI Vendor Specific
|
||||
InfoFrame).
|
||||
|
|
|
@ -201,10 +201,10 @@ To change the radio frequency the
|
|||
* - ``V4L2_TUNER_SDR``
|
||||
- 4
|
||||
- Tuner controls the A/D and/or D/A block of a
|
||||
Sofware Digital Radio (SDR)
|
||||
Software Digital Radio (SDR)
|
||||
* - ``V4L2_TUNER_RF``
|
||||
- 5
|
||||
- Tuner controls the RF part of a Sofware Digital Radio (SDR)
|
||||
- Tuner controls the RF part of a Software Digital Radio (SDR)
|
||||
|
||||
|
||||
.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}|
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
AU0828 cards list
|
||||
=================
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
0 -> Unknown board (au0828)
|
||||
1 -> Hauppauge HVR950Q (au0828) [2040:7200,2040:7210,2040:7217,2040:721b,2040:721e,2040:721f,2040:7280,0fd9:0008,2040:7260,2040:7213,2040:7270]
|
||||
2 -> Hauppauge HVR850 (au0828) [2040:7240]
|
||||
3 -> DViCO FusionHDTV USB (au0828) [0fe9:d620]
|
||||
4 -> Hauppauge HVR950Q rev xxF8 (au0828) [2040:7201,2040:7211,2040:7281]
|
||||
5 -> Hauppauge Woodbury (au0828) [05e1:0480,2040:8200]
|
||||
=========== ========================== =======================================================================================================================
|
||||
Card number Card name USB IDs
|
||||
=========== ========================== =======================================================================================================================
|
||||
0 Unknown board
|
||||
1 Hauppauge HVR950Q 2040:7200, 2040:7210, 2040:7217, 2040:721b, 2040:721e, 2040:721f, 2040:7280, 0fd9:0008, 2040:7260, 2040:7213, 2040:7270
|
||||
2 Hauppauge HVR850 2040:7240
|
||||
3 DViCO FusionHDTV USB 0fe9:d620
|
||||
4 Hauppauge HVR950Q rev xxF8 2040:7201, 2040:7211, 2040:7281
|
||||
5 Hauppauge Woodbury 05e1:0480, 2040:8200
|
||||
=========== ========================== =======================================================================================================================
|
||||
|
|
|
@ -1,172 +1,174 @@
|
|||
BTTV cards list
|
||||
===============
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
0 -> *** UNKNOWN/GENERIC ***
|
||||
1 -> MIRO PCTV
|
||||
2 -> Hauppauge (bt848)
|
||||
3 -> STB, Gateway P/N 6000699 (bt848)
|
||||
4 -> Intel Create and Share PCI/ Smart Video Recorder III
|
||||
5 -> Diamond DTV2000
|
||||
6 -> AVerMedia TVPhone
|
||||
7 -> MATRIX-Vision MV-Delta
|
||||
8 -> Lifeview FlyVideo II (Bt848) LR26 / MAXI TV Video PCI2 LR26
|
||||
9 -> IMS/IXmicro TurboTV
|
||||
10 -> Hauppauge (bt878) [0070:13eb,0070:3900,2636:10b4]
|
||||
11 -> MIRO PCTV pro
|
||||
12 -> ADS Technologies Channel Surfer TV (bt848)
|
||||
13 -> AVerMedia TVCapture 98 [1461:0002,1461:0004,1461:0300]
|
||||
14 -> Aimslab Video Highway Xtreme (VHX)
|
||||
15 -> Zoltrix TV-Max [a1a0:a0fc]
|
||||
16 -> Prolink Pixelview PlayTV (bt878)
|
||||
17 -> Leadtek WinView 601
|
||||
18 -> AVEC Intercapture
|
||||
19 -> Lifeview FlyVideo II EZ /FlyKit LR38 Bt848 (capture only)
|
||||
20 -> CEI Raffles Card
|
||||
21 -> Lifeview FlyVideo 98/ Lucky Star Image World ConferenceTV LR50
|
||||
22 -> Askey CPH050/ Phoebe Tv Master + FM [14ff:3002]
|
||||
23 -> Modular Technology MM201/MM202/MM205/MM210/MM215 PCTV, bt878 [14c7:0101]
|
||||
24 -> Askey CPH05X/06X (bt878) [many vendors] [144f:3002,144f:3005,144f:5000,14ff:3000]
|
||||
25 -> Terratec TerraTV+ Version 1.0 (Bt848)/ Terra TValue Version 1.0/ Vobis TV-Boostar
|
||||
26 -> Hauppauge WinCam newer (bt878)
|
||||
27 -> Lifeview FlyVideo 98/ MAXI TV Video PCI2 LR50
|
||||
28 -> Terratec TerraTV+ Version 1.1 (bt878) [153b:1127,1852:1852]
|
||||
29 -> Imagenation PXC200 [1295:200a]
|
||||
30 -> Lifeview FlyVideo 98 LR50 [1f7f:1850]
|
||||
31 -> Formac iProTV, Formac ProTV I (bt848)
|
||||
32 -> Intel Create and Share PCI/ Smart Video Recorder III
|
||||
33 -> Terratec TerraTValue Version Bt878 [153b:1117,153b:1118,153b:1119,153b:111a,153b:1134,153b:5018]
|
||||
34 -> Leadtek WinFast 2000/ WinFast 2000 XP [107d:6606,107d:6609,6606:217d,f6ff:fff6]
|
||||
35 -> Lifeview FlyVideo 98 LR50 / Chronos Video Shuttle II [1851:1850,1851:a050]
|
||||
36 -> Lifeview FlyVideo 98FM LR50 / Typhoon TView TV/FM Tuner [1852:1852]
|
||||
37 -> Prolink PixelView PlayTV pro
|
||||
38 -> Askey CPH06X TView99 [144f:3000,144f:a005,a04f:a0fc]
|
||||
39 -> Pinnacle PCTV Studio/Rave [11bd:0012,bd11:1200,bd11:ff00,11bd:ff12]
|
||||
40 -> STB TV PCI FM, Gateway P/N 6000704 (bt878), 3Dfx VoodooTV 100 [10b4:2636,10b4:2645,121a:3060]
|
||||
41 -> AVerMedia TVPhone 98 [1461:0001,1461:0003]
|
||||
42 -> ProVideo PV951 [aa0c:146c]
|
||||
43 -> Little OnAir TV
|
||||
44 -> Sigma TVII-FM
|
||||
45 -> MATRIX-Vision MV-Delta 2
|
||||
46 -> Zoltrix Genie TV/FM [15b0:4000,15b0:400a,15b0:400d,15b0:4010,15b0:4016]
|
||||
47 -> Terratec TV/Radio+ [153b:1123]
|
||||
48 -> Askey CPH03x/ Dynalink Magic TView
|
||||
49 -> IODATA GV-BCTV3/PCI [10fc:4020]
|
||||
50 -> Prolink PV-BT878P+4E / PixelView PlayTV PAK / Lenco MXTV-9578 CP
|
||||
51 -> Eagle Wireless Capricorn2 (bt878A)
|
||||
52 -> Pinnacle PCTV Studio Pro
|
||||
53 -> Typhoon TView RDS + FM Stereo / KNC1 TV Station RDS
|
||||
54 -> Lifeview FlyVideo 2000 /FlyVideo A2/ Lifetec LT 9415 TV [LR90]
|
||||
55 -> Askey CPH031/ BESTBUY Easy TV
|
||||
56 -> Lifeview FlyVideo 98FM LR50 [a051:41a0]
|
||||
57 -> GrandTec 'Grand Video Capture' (Bt848) [4344:4142]
|
||||
58 -> Askey CPH060/ Phoebe TV Master Only (No FM)
|
||||
59 -> Askey CPH03x TV Capturer
|
||||
60 -> Modular Technology MM100PCTV
|
||||
61 -> AG Electronics GMV1 [15cb:0101]
|
||||
62 -> Askey CPH061/ BESTBUY Easy TV (bt878)
|
||||
63 -> ATI TV-Wonder [1002:0001]
|
||||
64 -> ATI TV-Wonder VE [1002:0003]
|
||||
65 -> Lifeview FlyVideo 2000S LR90
|
||||
66 -> Terratec TValueRadio [153b:1135,153b:ff3b]
|
||||
67 -> IODATA GV-BCTV4/PCI [10fc:4050]
|
||||
68 -> 3Dfx VoodooTV FM (Euro) [10b4:2637]
|
||||
69 -> Active Imaging AIMMS
|
||||
70 -> Prolink Pixelview PV-BT878P+ (Rev.4C,8E)
|
||||
71 -> Lifeview FlyVideo 98EZ (capture only) LR51 [1851:1851]
|
||||
72 -> Prolink Pixelview PV-BT878P+9B (PlayTV Pro rev.9B FM+NICAM) [1554:4011]
|
||||
73 -> Sensoray 311/611 [6000:0311,6000:0611]
|
||||
74 -> RemoteVision MX (RV605)
|
||||
75 -> Powercolor MTV878/ MTV878R/ MTV878F
|
||||
76 -> Canopus WinDVR PCI (COMPAQ Presario 3524JP, 5112JP) [0e11:0079]
|
||||
77 -> GrandTec Multi Capture Card (Bt878)
|
||||
78 -> Jetway TV/Capture JW-TV878-FBK, Kworld KW-TV878RF [0a01:17de]
|
||||
79 -> DSP Design TCVIDEO
|
||||
80 -> Hauppauge WinTV PVR [0070:4500]
|
||||
81 -> IODATA GV-BCTV5/PCI [10fc:4070,10fc:d018]
|
||||
82 -> Osprey 100/150 (878) [0070:ff00]
|
||||
83 -> Osprey 100/150 (848)
|
||||
84 -> Osprey 101 (848)
|
||||
85 -> Osprey 101/151
|
||||
86 -> Osprey 101/151 w/ svid
|
||||
87 -> Osprey 200/201/250/251
|
||||
88 -> Osprey 200/250 [0070:ff01]
|
||||
89 -> Osprey 210/220/230
|
||||
90 -> Osprey 500 [0070:ff02]
|
||||
91 -> Osprey 540 [0070:ff04]
|
||||
92 -> Osprey 2000 [0070:ff03]
|
||||
93 -> IDS Eagle
|
||||
94 -> Pinnacle PCTV Sat [11bd:001c]
|
||||
95 -> Formac ProTV II (bt878)
|
||||
96 -> MachTV
|
||||
97 -> Euresys Picolo
|
||||
98 -> ProVideo PV150 [aa00:1460,aa01:1461,aa02:1462,aa03:1463,aa04:1464,aa05:1465,aa06:1466,aa07:1467]
|
||||
99 -> AD-TVK503
|
||||
100 -> Hercules Smart TV Stereo
|
||||
101 -> Pace TV & Radio Card
|
||||
102 -> IVC-200 [0000:a155,0001:a155,0002:a155,0003:a155,0100:a155,0101:a155,0102:a155,0103:a155,0800:a155,0801:a155,0802:a155,0803:a155]
|
||||
103 -> Grand X-Guard / Trust 814PCI [0304:0102]
|
||||
104 -> Nebula Electronics DigiTV [0071:0101]
|
||||
105 -> ProVideo PV143 [aa00:1430,aa00:1431,aa00:1432,aa00:1433,aa03:1433]
|
||||
106 -> PHYTEC VD-009-X1 VD-011 MiniDIN (bt878)
|
||||
107 -> PHYTEC VD-009-X1 VD-011 Combi (bt878)
|
||||
108 -> PHYTEC VD-009 MiniDIN (bt878)
|
||||
109 -> PHYTEC VD-009 Combi (bt878)
|
||||
110 -> IVC-100 [ff00:a132]
|
||||
111 -> IVC-120G [ff00:a182,ff01:a182,ff02:a182,ff03:a182,ff04:a182,ff05:a182,ff06:a182,ff07:a182,ff08:a182,ff09:a182,ff0a:a182,ff0b:a182,ff0c:a182,ff0d:a182,ff0e:a182,ff0f:a182]
|
||||
112 -> pcHDTV HD-2000 TV [7063:2000]
|
||||
113 -> Twinhan DST + clones [11bd:0026,1822:0001,270f:fc00,1822:0026]
|
||||
114 -> Winfast VC100 [107d:6607]
|
||||
115 -> Teppro TEV-560/InterVision IV-560
|
||||
116 -> SIMUS GVC1100 [aa6a:82b2]
|
||||
117 -> NGS NGSTV+
|
||||
118 -> LMLBT4
|
||||
119 -> Tekram M205 PRO
|
||||
120 -> Conceptronic CONTVFMi
|
||||
121 -> Euresys Picolo Tetra [1805:0105,1805:0106,1805:0107,1805:0108]
|
||||
122 -> Spirit TV Tuner
|
||||
123 -> AVerMedia AVerTV DVB-T 771 [1461:0771]
|
||||
124 -> AverMedia AverTV DVB-T 761 [1461:0761]
|
||||
125 -> MATRIX Vision Sigma-SQ
|
||||
126 -> MATRIX Vision Sigma-SLC
|
||||
127 -> APAC Viewcomp 878(AMAX)
|
||||
128 -> DViCO FusionHDTV DVB-T Lite [18ac:db10,18ac:db11]
|
||||
129 -> V-Gear MyVCD
|
||||
130 -> Super TV Tuner
|
||||
131 -> Tibet Systems 'Progress DVR' CS16
|
||||
132 -> Kodicom 4400R (master)
|
||||
133 -> Kodicom 4400R (slave)
|
||||
134 -> Adlink RTV24
|
||||
135 -> DViCO FusionHDTV 5 Lite [18ac:d500]
|
||||
136 -> Acorp Y878F [9511:1540]
|
||||
137 -> Conceptronic CTVFMi v2 [036e:109e]
|
||||
138 -> Prolink Pixelview PV-BT878P+ (Rev.2E)
|
||||
139 -> Prolink PixelView PlayTV MPEG2 PV-M4900
|
||||
140 -> Osprey 440 [0070:ff07]
|
||||
141 -> Asound Skyeye PCTV
|
||||
142 -> Sabrent TV-FM (bttv version)
|
||||
143 -> Hauppauge ImpactVCB (bt878) [0070:13eb]
|
||||
144 -> MagicTV
|
||||
145 -> SSAI Security Video Interface [4149:5353]
|
||||
146 -> SSAI Ultrasound Video Interface [414a:5353]
|
||||
147 -> VoodooTV 200 (USA) [121a:3000]
|
||||
148 -> DViCO FusionHDTV 2 [dbc0:d200]
|
||||
149 -> Typhoon TV-Tuner PCI (50684)
|
||||
150 -> Geovision GV-600 [008a:763c]
|
||||
151 -> Kozumi KTV-01C
|
||||
152 -> Encore ENL TV-FM-2 [1000:1801]
|
||||
153 -> PHYTEC VD-012 (bt878)
|
||||
154 -> PHYTEC VD-012-X1 (bt878)
|
||||
155 -> PHYTEC VD-012-X2 (bt878)
|
||||
156 -> IVCE-8784 [0000:f050,0001:f050,0002:f050,0003:f050]
|
||||
157 -> Geovision GV-800(S) (master) [800a:763d]
|
||||
158 -> Geovision GV-800(S) (slave) [800b:763d,800c:763d,800d:763d]
|
||||
159 -> ProVideo PV183 [1830:1540,1831:1540,1832:1540,1833:1540,1834:1540,1835:1540,1836:1540,1837:1540]
|
||||
160 -> Tongwei Video Technology TD-3116 [f200:3116]
|
||||
161 -> Aposonic W-DVR [0279:0228]
|
||||
162 -> Adlink MPG24
|
||||
163 -> Bt848 Capture 14MHz
|
||||
164 -> CyberVision CV06 (SV)
|
||||
165 -> Kworld V-Stream Xpert TV PVR878
|
||||
166 -> PCI-8604PW
|
||||
=========== ================================================================================= ==============================================================================================================================================================================
|
||||
Card number Card name PCI IDs
|
||||
=========== ================================================================================= ==============================================================================================================================================================================
|
||||
0 *** UNKNOWN/GENERIC ***
|
||||
1 MIRO PCTV
|
||||
2 Hauppauge (bt848)
|
||||
3 STB, Gateway P/N 6000699 (bt848)
|
||||
4 Intel Create and Share PCI/ Smart Video Recorder III
|
||||
5 Diamond DTV2000
|
||||
6 AVerMedia TVPhone
|
||||
7 MATRIX-Vision MV-Delta
|
||||
8 Lifeview FlyVideo II (Bt848) LR26 / MAXI TV Video PCI2 LR26
|
||||
9 IMS/IXmicro TurboTV
|
||||
10 Hauppauge (bt878) 0070:13eb, 0070:3900, 2636:10b4
|
||||
11 MIRO PCTV pro
|
||||
12 ADS Technologies Channel Surfer TV (bt848)
|
||||
13 AVerMedia TVCapture 98 1461:0002, 1461:0004, 1461:0300
|
||||
14 Aimslab Video Highway Xtreme (VHX)
|
||||
15 Zoltrix TV-Max a1a0:a0fc
|
||||
16 Prolink Pixelview PlayTV (bt878)
|
||||
17 Leadtek WinView 601
|
||||
18 AVEC Intercapture
|
||||
19 Lifeview FlyVideo II EZ /FlyKit LR38 Bt848 (capture only)
|
||||
20 CEI Raffles Card
|
||||
21 Lifeview FlyVideo 98/ Lucky Star Image World ConferenceTV LR50
|
||||
22 Askey CPH050/ Phoebe Tv Master + FM 14ff:3002
|
||||
23 Modular Technology MM201/MM202/MM205/MM210/MM215 PCTV, bt878 14c7:0101
|
||||
24 Askey CPH05X/06X (bt878) [many vendors] 144f:3002, 144f:3005, 144f:5000, 14ff:3000
|
||||
25 Terratec TerraTV+ Version 1.0 (Bt848)/ Terra TValue Version 1.0/ Vobis TV-Boostar
|
||||
26 Hauppauge WinCam newer (bt878)
|
||||
27 Lifeview FlyVideo 98/ MAXI TV Video PCI2 LR50
|
||||
28 Terratec TerraTV+ Version 1.1 (bt878) 153b:1127, 1852:1852
|
||||
29 Imagenation PXC200 1295:200a
|
||||
30 Lifeview FlyVideo 98 LR50 1f7f:1850
|
||||
31 Formac iProTV, Formac ProTV I (bt848)
|
||||
32 Intel Create and Share PCI/ Smart Video Recorder III
|
||||
33 Terratec TerraTValue Version Bt878 153b:1117, 153b:1118, 153b:1119, 153b:111a, 153b:1134, 153b:5018
|
||||
34 Leadtek WinFast 2000/ WinFast 2000 XP 107d:6606, 107d:6609, 6606:217d, f6ff:fff6
|
||||
35 Lifeview FlyVideo 98 LR50 / Chronos Video Shuttle II 1851:1850, 1851:a050
|
||||
36 Lifeview FlyVideo 98FM LR50 / Typhoon TView TV/FM Tuner 1852:1852
|
||||
37 Prolink PixelView PlayTV pro
|
||||
38 Askey CPH06X TView99 144f:3000, 144f:a005, a04f:a0fc
|
||||
39 Pinnacle PCTV Studio/Rave 11bd:0012, bd11:1200, bd11:ff00, 11bd:ff12
|
||||
40 STB TV PCI FM, Gateway P/N 6000704 (bt878), 3Dfx VoodooTV 100 10b4:2636, 10b4:2645, 121a:3060
|
||||
41 AVerMedia TVPhone 98 1461:0001, 1461:0003
|
||||
42 ProVideo PV951 aa0c:146c
|
||||
43 Little OnAir TV
|
||||
44 Sigma TVII-FM
|
||||
45 MATRIX-Vision MV-Delta 2
|
||||
46 Zoltrix Genie TV/FM 15b0:4000, 15b0:400a, 15b0:400d, 15b0:4010, 15b0:4016
|
||||
47 Terratec TV/Radio+ 153b:1123
|
||||
48 Askey CPH03x/ Dynalink Magic TView
|
||||
49 IODATA GV-BCTV3/PCI 10fc:4020
|
||||
50 Prolink PV-BT878P+4E / PixelView PlayTV PAK / Lenco MXTV-9578 CP
|
||||
51 Eagle Wireless Capricorn2 (bt878A)
|
||||
52 Pinnacle PCTV Studio Pro
|
||||
53 Typhoon TView RDS + FM Stereo / KNC1 TV Station RDS
|
||||
54 Lifeview FlyVideo 2000 /FlyVideo A2/ Lifetec LT 9415 TV [LR90]
|
||||
55 Askey CPH031/ BESTBUY Easy TV
|
||||
56 Lifeview FlyVideo 98FM LR50 a051:41a0
|
||||
57 GrandTec 'Grand Video Capture' (Bt848) 4344:4142
|
||||
58 Askey CPH060/ Phoebe TV Master Only (No FM)
|
||||
59 Askey CPH03x TV Capturer
|
||||
60 Modular Technology MM100PCTV
|
||||
61 AG Electronics GMV1 15cb:0101
|
||||
62 Askey CPH061/ BESTBUY Easy TV (bt878)
|
||||
63 ATI TV-Wonder 1002:0001
|
||||
64 ATI TV-Wonder VE 1002:0003
|
||||
65 Lifeview FlyVideo 2000S LR90
|
||||
66 Terratec TValueRadio 153b:1135, 153b:ff3b
|
||||
67 IODATA GV-BCTV4/PCI 10fc:4050
|
||||
68 3Dfx VoodooTV FM (Euro) 10b4:2637
|
||||
69 Active Imaging AIMMS
|
||||
70 Prolink Pixelview PV-BT878P+ (Rev.4C,8E)
|
||||
71 Lifeview FlyVideo 98EZ (capture only) LR51 1851:1851
|
||||
72 Prolink Pixelview PV-BT878P+9B (PlayTV Pro rev.9B FM+NICAM) 1554:4011
|
||||
73 Sensoray 311/611 6000:0311, 6000:0611
|
||||
74 RemoteVision MX (RV605)
|
||||
75 Powercolor MTV878/ MTV878R/ MTV878F
|
||||
76 Canopus WinDVR PCI (COMPAQ Presario 3524JP, 5112JP) 0e11:0079
|
||||
77 GrandTec Multi Capture Card (Bt878)
|
||||
78 Jetway TV/Capture JW-TV878-FBK, Kworld KW-TV878RF 0a01:17de
|
||||
79 DSP Design TCVIDEO
|
||||
80 Hauppauge WinTV PVR 0070:4500
|
||||
81 IODATA GV-BCTV5/PCI 10fc:4070, 10fc:d018
|
||||
82 Osprey 100/150 (878) 0070:ff00
|
||||
83 Osprey 100/150 (848)
|
||||
84 Osprey 101 (848)
|
||||
85 Osprey 101/151
|
||||
86 Osprey 101/151 w/ svid
|
||||
87 Osprey 200/201/250/251
|
||||
88 Osprey 200/250 0070:ff01
|
||||
89 Osprey 210/220/230
|
||||
90 Osprey 500 0070:ff02
|
||||
91 Osprey 540 0070:ff04
|
||||
92 Osprey 2000 0070:ff03
|
||||
93 IDS Eagle
|
||||
94 Pinnacle PCTV Sat 11bd:001c
|
||||
95 Formac ProTV II (bt878)
|
||||
96 MachTV
|
||||
97 Euresys Picolo
|
||||
98 ProVideo PV150 aa00:1460, aa01:1461, aa02:1462, aa03:1463, aa04:1464, aa05:1465, aa06:1466, aa07:1467
|
||||
99 AD-TVK503
|
||||
100 Hercules Smart TV Stereo
|
||||
101 Pace TV & Radio Card
|
||||
102 IVC-200 0000:a155, 0001:a155, 0002:a155, 0003:a155, 0100:a155, 0101:a155, 0102:a155, 0103:a155, 0800:a155, 0801:a155, 0802:a155, 0803:a155
|
||||
103 Grand X-Guard / Trust 814PCI 0304:0102
|
||||
104 Nebula Electronics DigiTV 0071:0101
|
||||
105 ProVideo PV143 aa00:1430, aa00:1431, aa00:1432, aa00:1433, aa03:1433
|
||||
106 PHYTEC VD-009-X1 VD-011 MiniDIN (bt878)
|
||||
107 PHYTEC VD-009-X1 VD-011 Combi (bt878)
|
||||
108 PHYTEC VD-009 MiniDIN (bt878)
|
||||
109 PHYTEC VD-009 Combi (bt878)
|
||||
110 IVC-100 ff00:a132
|
||||
111 IVC-120G ff00:a182, ff01:a182, ff02:a182, ff03:a182, ff04:a182, ff05:a182, ff06:a182, ff07:a182, ff08:a182, ff09:a182, ff0a:a182, ff0b:a182, ff0c:a182, ff0d:a182, ff0e:a182, ff0f:a182
|
||||
112 pcHDTV HD-2000 TV 7063:2000
|
||||
113 Twinhan DST + clones 11bd:0026, 1822:0001, 270f:fc00, 1822:0026
|
||||
114 Winfast VC100 107d:6607
|
||||
115 Teppro TEV-560/InterVision IV-560
|
||||
116 SIMUS GVC1100 aa6a:82b2
|
||||
117 NGS NGSTV+
|
||||
118 LMLBT4
|
||||
119 Tekram M205 PRO
|
||||
120 Conceptronic CONTVFMi
|
||||
121 Euresys Picolo Tetra 1805:0105, 1805:0106, 1805:0107, 1805:0108
|
||||
122 Spirit TV Tuner
|
||||
123 AVerMedia AVerTV DVB-T 771 1461:0771
|
||||
124 AverMedia AverTV DVB-T 761 1461:0761
|
||||
125 MATRIX Vision Sigma-SQ
|
||||
126 MATRIX Vision Sigma-SLC
|
||||
127 APAC Viewcomp 878(AMAX)
|
||||
128 DViCO FusionHDTV DVB-T Lite 18ac:db10, 18ac:db11
|
||||
129 V-Gear MyVCD
|
||||
130 Super TV Tuner
|
||||
131 Tibet Systems 'Progress DVR' CS16
|
||||
132 Kodicom 4400R (master)
|
||||
133 Kodicom 4400R (slave)
|
||||
134 Adlink RTV24
|
||||
135 DViCO FusionHDTV 5 Lite 18ac:d500
|
||||
136 Acorp Y878F 9511:1540
|
||||
137 Conceptronic CTVFMi v2 036e:109e
|
||||
138 Prolink Pixelview PV-BT878P+ (Rev.2E)
|
||||
139 Prolink PixelView PlayTV MPEG2 PV-M4900
|
||||
140 Osprey 440 0070:ff07
|
||||
141 Asound Skyeye PCTV
|
||||
142 Sabrent TV-FM (bttv version)
|
||||
143 Hauppauge ImpactVCB (bt878) 0070:13eb
|
||||
144 MagicTV
|
||||
145 SSAI Security Video Interface 4149:5353
|
||||
146 SSAI Ultrasound Video Interface 414a:5353
|
||||
147 VoodooTV 200 (USA) 121a:3000
|
||||
148 DViCO FusionHDTV 2 dbc0:d200
|
||||
149 Typhoon TV-Tuner PCI (50684)
|
||||
150 Geovision GV-600 008a:763c
|
||||
151 Kozumi KTV-01C
|
||||
152 Encore ENL TV-FM-2 1000:1801
|
||||
153 PHYTEC VD-012 (bt878)
|
||||
154 PHYTEC VD-012-X1 (bt878)
|
||||
155 PHYTEC VD-012-X2 (bt878)
|
||||
156 IVCE-8784 0000:f050, 0001:f050, 0002:f050, 0003:f050
|
||||
157 Geovision GV-800(S) (master) 800a:763d
|
||||
158 Geovision GV-800(S) (slave) 800b:763d, 800c:763d, 800d:763d
|
||||
159 ProVideo PV183 1830:1540, 1831:1540, 1832:1540, 1833:1540, 1834:1540, 1835:1540, 1836:1540, 1837:1540
|
||||
160 Tongwei Video Technology TD-3116 f200:3116
|
||||
161 Aposonic W-DVR 0279:0228
|
||||
162 Adlink MPG24
|
||||
163 Bt848 Capture 14MHz
|
||||
164 CyberVision CV06 (SV)
|
||||
165 Kworld V-Stream Xpert TV PVR878
|
||||
166 PCI-8604PW
|
||||
=========== ================================================================================= ==============================================================================================================================================================================
|
||||
|
|
|
@ -1,63 +1,65 @@
|
|||
cx23885 cards list
|
||||
==================
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
0 -> UNKNOWN/GENERIC [0070:3400]
|
||||
1 -> Hauppauge WinTV-HVR1800lp [0070:7600]
|
||||
2 -> Hauppauge WinTV-HVR1800 [0070:7800,0070:7801,0070:7809]
|
||||
3 -> Hauppauge WinTV-HVR1250 [0070:7911]
|
||||
4 -> DViCO FusionHDTV5 Express [18ac:d500]
|
||||
5 -> Hauppauge WinTV-HVR1500Q [0070:7790,0070:7797]
|
||||
6 -> Hauppauge WinTV-HVR1500 [0070:7710,0070:7717]
|
||||
7 -> Hauppauge WinTV-HVR1200 [0070:71d1,0070:71d3]
|
||||
8 -> Hauppauge WinTV-HVR1700 [0070:8101]
|
||||
9 -> Hauppauge WinTV-HVR1400 [0070:8010]
|
||||
10 -> DViCO FusionHDTV7 Dual Express [18ac:d618]
|
||||
11 -> DViCO FusionHDTV DVB-T Dual Express [18ac:db78]
|
||||
12 -> Leadtek Winfast PxDVR3200 H [107d:6681]
|
||||
13 -> Compro VideoMate E650F [185b:e800]
|
||||
14 -> TurboSight TBS 6920 [6920:8888]
|
||||
15 -> TeVii S470 [d470:9022]
|
||||
16 -> DVBWorld DVB-S2 2005 [0001:2005]
|
||||
17 -> NetUP Dual DVB-S2 CI [1b55:2a2c]
|
||||
18 -> Hauppauge WinTV-HVR1270 [0070:2211]
|
||||
19 -> Hauppauge WinTV-HVR1275 [0070:2215,0070:221d,0070:22f2]
|
||||
20 -> Hauppauge WinTV-HVR1255 [0070:2251,0070:22f1]
|
||||
21 -> Hauppauge WinTV-HVR1210 [0070:2291,0070:2295,0070:2299,0070:229d,0070:22f0,0070:22f3,0070:22f4,0070:22f5]
|
||||
22 -> Mygica X8506 DMB-TH [14f1:8651]
|
||||
23 -> Magic-Pro ProHDTV Extreme 2 [14f1:8657]
|
||||
24 -> Hauppauge WinTV-HVR1850 [0070:8541]
|
||||
25 -> Compro VideoMate E800 [1858:e800]
|
||||
26 -> Hauppauge WinTV-HVR1290 [0070:8551]
|
||||
27 -> Mygica X8558 PRO DMB-TH [14f1:8578]
|
||||
28 -> LEADTEK WinFast PxTV1200 [107d:6f22]
|
||||
29 -> GoTView X5 3D Hybrid [5654:2390]
|
||||
30 -> NetUP Dual DVB-T/C-CI RF [1b55:e2e4]
|
||||
31 -> Leadtek Winfast PxDVR3200 H XC4000 [107d:6f39]
|
||||
32 -> MPX-885
|
||||
33 -> Mygica X8502/X8507 ISDB-T [14f1:8502]
|
||||
34 -> TerraTec Cinergy T PCIe Dual [153b:117e]
|
||||
35 -> TeVii S471 [d471:9022]
|
||||
36 -> Hauppauge WinTV-HVR1255 [0070:2259]
|
||||
37 -> Prof Revolution DVB-S2 8000 [8000:3034]
|
||||
38 -> Hauppauge WinTV-HVR4400/HVR5500 [0070:c108,0070:c138,0070:c1f8]
|
||||
39 -> AVerTV Hybrid Express Slim HC81R [1461:d939]
|
||||
40 -> TurboSight TBS 6981 [6981:8888]
|
||||
41 -> TurboSight TBS 6980 [6980:8888]
|
||||
42 -> Leadtek Winfast PxPVR2200 [107d:6f21]
|
||||
43 -> Hauppauge ImpactVCB-e [0070:7133]
|
||||
44 -> DViCO FusionHDTV DVB-T Dual Express2 [18ac:db98]
|
||||
45 -> DVBSky T9580 [4254:9580]
|
||||
46 -> DVBSky T980C [4254:980c]
|
||||
47 -> DVBSky S950C [4254:950c]
|
||||
48 -> Technotrend TT-budget CT2-4500 CI [13c2:3013]
|
||||
49 -> DVBSky S950 [4254:0950]
|
||||
50 -> DVBSky S952 [4254:0952]
|
||||
51 -> DVBSky T982 [4254:0982]
|
||||
52 -> Hauppauge WinTV-HVR5525 [0070:f038]
|
||||
53 -> Hauppauge WinTV Starburst [0070:c12a]
|
||||
54 -> ViewCast 260e [1576:0260]
|
||||
55 -> ViewCast 460e [1576:0460]
|
||||
56 -> Hauppauge WinTV-QuadHD-DVB [0070:6a28,0070:6b28]
|
||||
57 -> Hauppauge WinTV-QuadHD-ATSC [0070:6a18,0070:6b18]
|
||||
=========== ==================================== ======================================================================================
|
||||
Card number Card name PCI IDs
|
||||
=========== ==================================== ======================================================================================
|
||||
0 UNKNOWN/GENERIC 0070:3400
|
||||
1 Hauppauge WinTV-HVR1800lp 0070:7600
|
||||
2 Hauppauge WinTV-HVR1800 0070:7800, 0070:7801, 0070:7809
|
||||
3 Hauppauge WinTV-HVR1250 0070:7911
|
||||
4 DViCO FusionHDTV5 Express 18ac:d500
|
||||
5 Hauppauge WinTV-HVR1500Q 0070:7790, 0070:7797
|
||||
6 Hauppauge WinTV-HVR1500 0070:7710, 0070:7717
|
||||
7 Hauppauge WinTV-HVR1200 0070:71d1, 0070:71d3
|
||||
8 Hauppauge WinTV-HVR1700 0070:8101
|
||||
9 Hauppauge WinTV-HVR1400 0070:8010
|
||||
10 DViCO FusionHDTV7 Dual Express 18ac:d618
|
||||
11 DViCO FusionHDTV DVB-T Dual Express 18ac:db78
|
||||
12 Leadtek Winfast PxDVR3200 H 107d:6681
|
||||
13 Compro VideoMate E650F 185b:e800
|
||||
14 TurboSight TBS 6920 6920:8888
|
||||
15 TeVii S470 d470:9022
|
||||
16 DVBWorld DVB-S2 2005 0001:2005
|
||||
17 NetUP Dual DVB-S2 CI 1b55:2a2c
|
||||
18 Hauppauge WinTV-HVR1270 0070:2211
|
||||
19 Hauppauge WinTV-HVR1275 0070:2215, 0070:221d, 0070:22f2
|
||||
20 Hauppauge WinTV-HVR1255 0070:2251, 0070:22f1
|
||||
21 Hauppauge WinTV-HVR1210 0070:2291, 0070:2295, 0070:2299, 0070:229d, 0070:22f0, 0070:22f3, 0070:22f4, 0070:22f5
|
||||
22 Mygica X8506 DMB-TH 14f1:8651
|
||||
23 Magic-Pro ProHDTV Extreme 2 14f1:8657
|
||||
24 Hauppauge WinTV-HVR1850 0070:8541
|
||||
25 Compro VideoMate E800 1858:e800
|
||||
26 Hauppauge WinTV-HVR1290 0070:8551
|
||||
27 Mygica X8558 PRO DMB-TH 14f1:8578
|
||||
28 LEADTEK WinFast PxTV1200 107d:6f22
|
||||
29 GoTView X5 3D Hybrid 5654:2390
|
||||
30 NetUP Dual DVB-T/C-CI RF 1b55:e2e4
|
||||
31 Leadtek Winfast PxDVR3200 H XC4000 107d:6f39
|
||||
32 MPX-885
|
||||
33 Mygica X8502/X8507 ISDB-T 14f1:8502
|
||||
34 TerraTec Cinergy T PCIe Dual 153b:117e
|
||||
35 TeVii S471 d471:9022
|
||||
36 Hauppauge WinTV-HVR1255 0070:2259
|
||||
37 Prof Revolution DVB-S2 8000 8000:3034
|
||||
38 Hauppauge WinTV-HVR4400/HVR5500 0070:c108, 0070:c138, 0070:c1f8
|
||||
39 AVerTV Hybrid Express Slim HC81R 1461:d939
|
||||
40 TurboSight TBS 6981 6981:8888
|
||||
41 TurboSight TBS 6980 6980:8888
|
||||
42 Leadtek Winfast PxPVR2200 107d:6f21
|
||||
43 Hauppauge ImpactVCB-e 0070:7133
|
||||
44 DViCO FusionHDTV DVB-T Dual Express2 18ac:db98
|
||||
45 DVBSky T9580 4254:9580
|
||||
46 DVBSky T980C 4254:980c
|
||||
47 DVBSky S950C 4254:950c
|
||||
48 Technotrend TT-budget CT2-4500 CI 13c2:3013
|
||||
49 DVBSky S950 4254:0950
|
||||
50 DVBSky S952 4254:0952
|
||||
51 DVBSky T982 4254:0982
|
||||
52 Hauppauge WinTV-HVR5525 0070:f038
|
||||
53 Hauppauge WinTV Starburst 0070:c12a
|
||||
54 ViewCast 260e 1576:0260
|
||||
55 ViewCast 460e 1576:0460
|
||||
56 Hauppauge WinTV-QuadHD-DVB 0070:6a28, 0070:6b28
|
||||
57 Hauppauge WinTV-QuadHD-ATSC 0070:6a18, 0070:6b18
|
||||
=========== ==================================== ======================================================================================
|
||||
|
|
|
@ -1,96 +1,98 @@
|
|||
CX88 cards list
|
||||
===============
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
0 -> UNKNOWN/GENERIC
|
||||
1 -> Hauppauge WinTV 34xxx models [0070:3400,0070:3401]
|
||||
2 -> GDI Black Gold [14c7:0106,14c7:0107]
|
||||
3 -> PixelView [1554:4811]
|
||||
4 -> ATI TV Wonder Pro [1002:00f8,1002:00f9]
|
||||
5 -> Leadtek Winfast 2000XP Expert [107d:6611,107d:6613]
|
||||
6 -> AverTV Studio 303 (M126) [1461:000b]
|
||||
7 -> MSI TV-@nywhere Master [1462:8606]
|
||||
8 -> Leadtek Winfast DV2000 [107d:6620,107d:6621]
|
||||
9 -> Leadtek PVR 2000 [107d:663b,107d:663c,107d:6632,107d:6630,107d:6638,107d:6631,107d:6637,107d:663d]
|
||||
10 -> IODATA GV-VCP3/PCI [10fc:d003]
|
||||
11 -> Prolink PlayTV PVR
|
||||
12 -> ASUS PVR-416 [1043:4823,1461:c111]
|
||||
13 -> MSI TV-@nywhere
|
||||
14 -> KWorld/VStream XPert DVB-T [17de:08a6]
|
||||
15 -> DViCO FusionHDTV DVB-T1 [18ac:db00]
|
||||
16 -> KWorld LTV883RF
|
||||
17 -> DViCO FusionHDTV 3 Gold-Q [18ac:d810,18ac:d800]
|
||||
18 -> Hauppauge Nova-T DVB-T [0070:9002,0070:9001,0070:9000]
|
||||
19 -> Conexant DVB-T reference design [14f1:0187]
|
||||
20 -> Provideo PV259 [1540:2580]
|
||||
21 -> DViCO FusionHDTV DVB-T Plus [18ac:db10,18ac:db11]
|
||||
22 -> pcHDTV HD3000 HDTV [7063:3000]
|
||||
23 -> digitalnow DNTV Live! DVB-T [17de:a8a6]
|
||||
24 -> Hauppauge WinTV 28xxx (Roslyn) models [0070:2801]
|
||||
25 -> Digital-Logic MICROSPACE Entertainment Center (MEC) [14f1:0342]
|
||||
26 -> IODATA GV/BCTV7E [10fc:d035]
|
||||
27 -> PixelView PlayTV Ultra Pro (Stereo)
|
||||
28 -> DViCO FusionHDTV 3 Gold-T [18ac:d820]
|
||||
29 -> ADS Tech Instant TV DVB-T PCI [1421:0334]
|
||||
30 -> TerraTec Cinergy 1400 DVB-T [153b:1166]
|
||||
31 -> DViCO FusionHDTV 5 Gold [18ac:d500]
|
||||
32 -> AverMedia UltraTV Media Center PCI 550 [1461:8011]
|
||||
33 -> Kworld V-Stream Xpert DVD
|
||||
34 -> ATI HDTV Wonder [1002:a101]
|
||||
35 -> WinFast DTV1000-T [107d:665f]
|
||||
36 -> AVerTV 303 (M126) [1461:000a]
|
||||
37 -> Hauppauge Nova-S-Plus DVB-S [0070:9201,0070:9202]
|
||||
38 -> Hauppauge Nova-SE2 DVB-S [0070:9200]
|
||||
39 -> KWorld DVB-S 100 [17de:08b2,1421:0341]
|
||||
40 -> Hauppauge WinTV-HVR1100 DVB-T/Hybrid [0070:9400,0070:9402]
|
||||
41 -> Hauppauge WinTV-HVR1100 DVB-T/Hybrid (Low Profile) [0070:9800,0070:9802]
|
||||
42 -> digitalnow DNTV Live! DVB-T Pro [1822:0025,1822:0019]
|
||||
43 -> KWorld/VStream XPert DVB-T with cx22702 [17de:08a1,12ab:2300]
|
||||
44 -> DViCO FusionHDTV DVB-T Dual Digital [18ac:db50,18ac:db54]
|
||||
45 -> KWorld HardwareMpegTV XPert [17de:0840,1421:0305]
|
||||
46 -> DViCO FusionHDTV DVB-T Hybrid [18ac:db40,18ac:db44]
|
||||
47 -> pcHDTV HD5500 HDTV [7063:5500]
|
||||
48 -> Kworld MCE 200 Deluxe [17de:0841]
|
||||
49 -> PixelView PlayTV P7000 [1554:4813]
|
||||
50 -> NPG Tech Real TV FM Top 10 [14f1:0842]
|
||||
51 -> WinFast DTV2000 H [107d:665e]
|
||||
52 -> Geniatech DVB-S [14f1:0084]
|
||||
53 -> Hauppauge WinTV-HVR3000 TriMode Analog/DVB-S/DVB-T [0070:1404,0070:1400,0070:1401,0070:1402]
|
||||
54 -> Norwood Micro TV Tuner
|
||||
55 -> Shenzhen Tungsten Ages Tech TE-DTV-250 / Swann OEM [c180:c980]
|
||||
56 -> Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG Encoder [0070:9600,0070:9601,0070:9602]
|
||||
57 -> ADS Tech Instant Video PCI [1421:0390]
|
||||
58 -> Pinnacle PCTV HD 800i [11bd:0051]
|
||||
59 -> DViCO FusionHDTV 5 PCI nano [18ac:d530]
|
||||
60 -> Pinnacle Hybrid PCTV [12ab:1788]
|
||||
61 -> Leadtek TV2000 XP Global [107d:6f18,107d:6618,107d:6619]
|
||||
62 -> PowerColor RA330 [14f1:ea3d]
|
||||
63 -> Geniatech X8000-MT DVBT [14f1:8852]
|
||||
64 -> DViCO FusionHDTV DVB-T PRO [18ac:db30]
|
||||
65 -> DViCO FusionHDTV 7 Gold [18ac:d610]
|
||||
66 -> Prolink Pixelview MPEG 8000GT [1554:4935]
|
||||
67 -> Kworld PlusTV HD PCI 120 (ATSC 120) [17de:08c1]
|
||||
68 -> Hauppauge WinTV-HVR4000 DVB-S/S2/T/Hybrid [0070:6900,0070:6904,0070:6902]
|
||||
69 -> Hauppauge WinTV-HVR4000(Lite) DVB-S/S2 [0070:6905,0070:6906]
|
||||
70 -> TeVii S460 DVB-S/S2 [d460:9022]
|
||||
71 -> Omicom SS4 DVB-S/S2 PCI [A044:2011]
|
||||
72 -> TBS 8920 DVB-S/S2 [8920:8888]
|
||||
73 -> TeVii S420 DVB-S [d420:9022]
|
||||
74 -> Prolink Pixelview Global Extreme [1554:4976]
|
||||
75 -> PROF 7300 DVB-S/S2 [B033:3033]
|
||||
76 -> SATTRADE ST4200 DVB-S/S2 [b200:4200]
|
||||
77 -> TBS 8910 DVB-S [8910:8888]
|
||||
78 -> Prof 6200 DVB-S [b022:3022]
|
||||
79 -> Terratec Cinergy HT PCI MKII [153b:1177]
|
||||
80 -> Hauppauge WinTV-IR Only [0070:9290]
|
||||
81 -> Leadtek WinFast DTV1800 Hybrid [107d:6654]
|
||||
82 -> WinFast DTV2000 H rev. J [107d:6f2b]
|
||||
83 -> Prof 7301 DVB-S/S2 [b034:3034]
|
||||
84 -> Samsung SMT 7020 DVB-S [18ac:dc00,18ac:dccd]
|
||||
85 -> Twinhan VP-1027 DVB-S [1822:0023]
|
||||
86 -> TeVii S464 DVB-S/S2 [d464:9022]
|
||||
87 -> Leadtek WinFast DTV2000 H PLUS [107d:6f42]
|
||||
88 -> Leadtek WinFast DTV1800 H (XC4000) [107d:6f38]
|
||||
89 -> Leadtek TV2000 XP Global (SC4100) [107d:6f36]
|
||||
90 -> Leadtek TV2000 XP Global (XC4100) [107d:6f43]
|
||||
=========== =================================================== ======================================================================================
|
||||
Card number Card name PCI IDs
|
||||
=========== =================================================== ======================================================================================
|
||||
0 UNKNOWN/GENERIC
|
||||
1 Hauppauge WinTV 34xxx models 0070:3400, 0070:3401
|
||||
2 GDI Black Gold 14c7:0106, 14c7:0107
|
||||
3 PixelView 1554:4811
|
||||
4 ATI TV Wonder Pro 1002:00f8, 1002:00f9
|
||||
5 Leadtek Winfast 2000XP Expert 107d:6611, 107d:6613
|
||||
6 AverTV Studio 303 (M126) 1461:000b
|
||||
7 MSI TV-@nywhere Master 1462:8606
|
||||
8 Leadtek Winfast DV2000 107d:6620, 107d:6621
|
||||
9 Leadtek PVR 2000 107d:663b, 107d:663c, 107d:6632, 107d:6630, 107d:6638, 107d:6631, 107d:6637, 107d:663d
|
||||
10 IODATA GV-VCP3/PCI 10fc:d003
|
||||
11 Prolink PlayTV PVR
|
||||
12 ASUS PVR-416 1043:4823, 1461:c111
|
||||
13 MSI TV-@nywhere
|
||||
14 KWorld/VStream XPert DVB-T 17de:08a6
|
||||
15 DViCO FusionHDTV DVB-T1 18ac:db00
|
||||
16 KWorld LTV883RF
|
||||
17 DViCO FusionHDTV 3 Gold-Q 18ac:d810, 18ac:d800
|
||||
18 Hauppauge Nova-T DVB-T 0070:9002, 0070:9001, 0070:9000
|
||||
19 Conexant DVB-T reference design 14f1:0187
|
||||
20 Provideo PV259 1540:2580
|
||||
21 DViCO FusionHDTV DVB-T Plus 18ac:db10, 18ac:db11
|
||||
22 pcHDTV HD3000 HDTV 7063:3000
|
||||
23 digitalnow DNTV Live! DVB-T 17de:a8a6
|
||||
24 Hauppauge WinTV 28xxx (Roslyn) models 0070:2801
|
||||
25 Digital-Logic MICROSPACE Entertainment Center (MEC) 14f1:0342
|
||||
26 IODATA GV/BCTV7E 10fc:d035
|
||||
27 PixelView PlayTV Ultra Pro (Stereo)
|
||||
28 DViCO FusionHDTV 3 Gold-T 18ac:d820
|
||||
29 ADS Tech Instant TV DVB-T PCI 1421:0334
|
||||
30 TerraTec Cinergy 1400 DVB-T 153b:1166
|
||||
31 DViCO FusionHDTV 5 Gold 18ac:d500
|
||||
32 AverMedia UltraTV Media Center PCI 550 1461:8011
|
||||
33 Kworld V-Stream Xpert DVD
|
||||
34 ATI HDTV Wonder 1002:a101
|
||||
35 WinFast DTV1000-T 107d:665f
|
||||
36 AVerTV 303 (M126) 1461:000a
|
||||
37 Hauppauge Nova-S-Plus DVB-S 0070:9201, 0070:9202
|
||||
38 Hauppauge Nova-SE2 DVB-S 0070:9200
|
||||
39 KWorld DVB-S 100 17de:08b2, 1421:0341
|
||||
40 Hauppauge WinTV-HVR1100 DVB-T/Hybrid 0070:9400, 0070:9402
|
||||
41 Hauppauge WinTV-HVR1100 DVB-T/Hybrid (Low Profile) 0070:9800, 0070:9802
|
||||
42 digitalnow DNTV Live! DVB-T Pro 1822:0025, 1822:0019
|
||||
43 KWorld/VStream XPert DVB-T with cx22702 17de:08a1, 12ab:2300
|
||||
44 DViCO FusionHDTV DVB-T Dual Digital 18ac:db50, 18ac:db54
|
||||
45 KWorld HardwareMpegTV XPert 17de:0840, 1421:0305
|
||||
46 DViCO FusionHDTV DVB-T Hybrid 18ac:db40, 18ac:db44
|
||||
47 pcHDTV HD5500 HDTV 7063:5500
|
||||
48 Kworld MCE 200 Deluxe 17de:0841
|
||||
49 PixelView PlayTV P7000 1554:4813
|
||||
50 NPG Tech Real TV FM Top 10 14f1:0842
|
||||
51 WinFast DTV2000 H 107d:665e
|
||||
52 Geniatech DVB-S 14f1:0084
|
||||
53 Hauppauge WinTV-HVR3000 TriMode Analog/DVB-S/DVB-T 0070:1404, 0070:1400, 0070:1401, 0070:1402
|
||||
54 Norwood Micro TV Tuner
|
||||
55 Shenzhen Tungsten Ages Tech TE-DTV-250 / Swann OEM c180:c980
|
||||
56 Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG Encoder 0070:9600, 0070:9601, 0070:9602
|
||||
57 ADS Tech Instant Video PCI 1421:0390
|
||||
58 Pinnacle PCTV HD 800i 11bd:0051
|
||||
59 DViCO FusionHDTV 5 PCI nano 18ac:d530
|
||||
60 Pinnacle Hybrid PCTV 12ab:1788
|
||||
61 Leadtek TV2000 XP Global 107d:6f18, 107d:6618, 107d:6619
|
||||
62 PowerColor RA330 14f1:ea3d
|
||||
63 Geniatech X8000-MT DVBT 14f1:8852
|
||||
64 DViCO FusionHDTV DVB-T PRO 18ac:db30
|
||||
65 DViCO FusionHDTV 7 Gold 18ac:d610
|
||||
66 Prolink Pixelview MPEG 8000GT 1554:4935
|
||||
67 Kworld PlusTV HD PCI 120 (ATSC 120) 17de:08c1
|
||||
68 Hauppauge WinTV-HVR4000 DVB-S/S2/T/Hybrid 0070:6900, 0070:6904, 0070:6902
|
||||
69 Hauppauge WinTV-HVR4000(Lite) DVB-S/S2 0070:6905, 0070:6906
|
||||
70 TeVii S460 DVB-S/S2 d460:9022
|
||||
71 Omicom SS4 DVB-S/S2 PCI A044:2011
|
||||
72 TBS 8920 DVB-S/S2 8920:8888
|
||||
73 TeVii S420 DVB-S d420:9022
|
||||
74 Prolink Pixelview Global Extreme 1554:4976
|
||||
75 PROF 7300 DVB-S/S2 B033:3033
|
||||
76 SATTRADE ST4200 DVB-S/S2 b200:4200
|
||||
77 TBS 8910 DVB-S 8910:8888
|
||||
78 Prof 6200 DVB-S b022:3022
|
||||
79 Terratec Cinergy HT PCI MKII 153b:1177
|
||||
80 Hauppauge WinTV-IR Only 0070:9290
|
||||
81 Leadtek WinFast DTV1800 Hybrid 107d:6654
|
||||
82 WinFast DTV2000 H rev. J 107d:6f2b
|
||||
83 Prof 7301 DVB-S/S2 b034:3034
|
||||
84 Samsung SMT 7020 DVB-S 18ac:dc00, 18ac:dccd
|
||||
85 Twinhan VP-1027 DVB-S 1822:0023
|
||||
86 TeVii S464 DVB-S/S2 d464:9022
|
||||
87 Leadtek WinFast DTV2000 H PLUS 107d:6f42
|
||||
88 Leadtek WinFast DTV1800 H (XC4000) 107d:6f38
|
||||
89 Leadtek TV2000 XP Global (SC4100) 107d:6f36
|
||||
90 Leadtek TV2000 XP Global (XC4100) 107d:6f43
|
||||
=========== =================================================== ======================================================================================
|
||||
|
|
|
@ -1,105 +1,107 @@
|
|||
EM28xx cards list
|
||||
=================
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
0 -> Unknown EM2800 video grabber (em2800) [eb1a:2800]
|
||||
1 -> Unknown EM2750/28xx video grabber (em2820/em2840) [eb1a:2710,eb1a:2820,eb1a:2821,eb1a:2860,eb1a:2861,eb1a:2862,eb1a:2863,eb1a:2870,eb1a:2881,eb1a:2883,eb1a:2868,eb1a:2875]
|
||||
2 -> Terratec Cinergy 250 USB (em2820/em2840) [0ccd:0036]
|
||||
3 -> Pinnacle PCTV USB 2 (em2820/em2840) [2304:0208]
|
||||
4 -> Hauppauge WinTV USB 2 (em2820/em2840) [2040:4200,2040:4201]
|
||||
5 -> MSI VOX USB 2.0 (em2820/em2840)
|
||||
6 -> Terratec Cinergy 200 USB (em2800)
|
||||
7 -> Leadtek Winfast USB II (em2800) [0413:6023]
|
||||
8 -> Kworld USB2800 (em2800)
|
||||
9 -> Pinnacle Dazzle DVC 90/100/101/107 / Kaiser Baas Video to DVD maker (em2820/em2840) [1b80:e302,1b80:e304,2304:0207,2304:021a,093b:a003]
|
||||
10 -> Hauppauge WinTV HVR 900 (em2880) [2040:6500]
|
||||
11 -> Terratec Hybrid XS (em2880)
|
||||
12 -> Kworld PVR TV 2800 RF (em2820/em2840)
|
||||
13 -> Terratec Prodigy XS (em2880)
|
||||
14 -> SIIG AVTuner-PVR / Pixelview Prolink PlayTV USB 2.0 (em2820/em2840)
|
||||
15 -> V-Gear PocketTV (em2800)
|
||||
16 -> Hauppauge WinTV HVR 950 (em2883) [2040:6513,2040:6517,2040:651b]
|
||||
17 -> Pinnacle PCTV HD Pro Stick (em2880) [2304:0227]
|
||||
18 -> Hauppauge WinTV HVR 900 (R2) (em2880) [2040:6502]
|
||||
19 -> EM2860/SAA711X Reference Design (em2860)
|
||||
20 -> AMD ATI TV Wonder HD 600 (em2880) [0438:b002]
|
||||
21 -> eMPIA Technology, Inc. GrabBeeX+ Video Encoder (em2800) [eb1a:2801]
|
||||
22 -> EM2710/EM2750/EM2751 webcam grabber (em2750) [eb1a:2750,eb1a:2751]
|
||||
23 -> Huaqi DLCW-130 (em2750)
|
||||
24 -> D-Link DUB-T210 TV Tuner (em2820/em2840) [2001:f112]
|
||||
25 -> Gadmei UTV310 (em2820/em2840)
|
||||
26 -> Hercules Smart TV USB 2.0 (em2820/em2840)
|
||||
27 -> Pinnacle PCTV USB 2 (Philips FM1216ME) (em2820/em2840)
|
||||
28 -> Leadtek Winfast USB II Deluxe (em2820/em2840)
|
||||
29 -> EM2860/TVP5150 Reference Design (em2860)
|
||||
30 -> Videology 20K14XUSB USB2.0 (em2820/em2840)
|
||||
31 -> Usbgear VD204v9 (em2821)
|
||||
32 -> Supercomp USB 2.0 TV (em2821)
|
||||
33 -> Elgato Video Capture (em2860) [0fd9:0033]
|
||||
34 -> Terratec Cinergy A Hybrid XS (em2860) [0ccd:004f]
|
||||
35 -> Typhoon DVD Maker (em2860)
|
||||
36 -> NetGMBH Cam (em2860)
|
||||
37 -> Gadmei UTV330 (em2860) [eb1a:50a6]
|
||||
38 -> Yakumo MovieMixer (em2861)
|
||||
39 -> KWorld PVRTV 300U (em2861) [eb1a:e300]
|
||||
40 -> Plextor ConvertX PX-TV100U (em2861) [093b:a005]
|
||||
41 -> Kworld 350 U DVB-T (em2870) [eb1a:e350]
|
||||
42 -> Kworld 355 U DVB-T (em2870) [eb1a:e355,eb1a:e357,eb1a:e359]
|
||||
43 -> Terratec Cinergy T XS (em2870)
|
||||
44 -> Terratec Cinergy T XS (MT2060) (em2870) [0ccd:0043]
|
||||
45 -> Pinnacle PCTV DVB-T (em2870)
|
||||
46 -> Compro, VideoMate U3 (em2870) [185b:2870]
|
||||
47 -> KWorld DVB-T 305U (em2880) [eb1a:e305]
|
||||
48 -> KWorld DVB-T 310U (em2880)
|
||||
49 -> MSI DigiVox A/D (em2880) [eb1a:e310]
|
||||
50 -> MSI DigiVox A/D II (em2880) [eb1a:e320]
|
||||
51 -> Terratec Hybrid XS Secam (em2880) [0ccd:004c]
|
||||
52 -> DNT DA2 Hybrid (em2881)
|
||||
53 -> Pinnacle Hybrid Pro (em2881)
|
||||
54 -> Kworld VS-DVB-T 323UR (em2882) [eb1a:e323]
|
||||
55 -> Terratec Cinnergy Hybrid T USB XS (em2882) (em2882) [0ccd:005e,0ccd:0042]
|
||||
56 -> Pinnacle Hybrid Pro (330e) (em2882) [2304:0226]
|
||||
57 -> Kworld PlusTV HD Hybrid 330 (em2883) [eb1a:a316]
|
||||
58 -> Compro VideoMate ForYou/Stereo (em2820/em2840) [185b:2041]
|
||||
59 -> Pinnacle PCTV HD Mini (em2874) [2304:023f]
|
||||
60 -> Hauppauge WinTV HVR 850 (em2883) [2040:651f]
|
||||
61 -> Pixelview PlayTV Box 4 USB 2.0 (em2820/em2840)
|
||||
62 -> Gadmei TVR200 (em2820/em2840)
|
||||
63 -> Kaiomy TVnPC U2 (em2860) [eb1a:e303]
|
||||
64 -> Easy Cap Capture DC-60 (em2860) [1b80:e309]
|
||||
65 -> IO-DATA GV-MVP/SZ (em2820/em2840) [04bb:0515]
|
||||
66 -> Empire dual TV (em2880)
|
||||
67 -> Terratec Grabby (em2860) [0ccd:0096,0ccd:10AF]
|
||||
68 -> Terratec AV350 (em2860) [0ccd:0084]
|
||||
69 -> KWorld ATSC 315U HDTV TV Box (em2882) [eb1a:a313]
|
||||
70 -> Evga inDtube (em2882)
|
||||
71 -> Silvercrest Webcam 1.3mpix (em2820/em2840)
|
||||
72 -> Gadmei UTV330+ (em2861)
|
||||
73 -> Reddo DVB-C USB TV Box (em2870)
|
||||
74 -> Actionmaster/LinXcel/Digitus VC211A (em2800)
|
||||
75 -> Dikom DK300 (em2882)
|
||||
76 -> KWorld PlusTV 340U or UB435-Q (ATSC) (em2870) [1b80:a340]
|
||||
77 -> EM2874 Leadership ISDBT (em2874)
|
||||
78 -> PCTV nanoStick T2 290e (em28174) [2013:024f]
|
||||
79 -> Terratec Cinergy H5 (em2884) [eb1a:2885,0ccd:10a2,0ccd:10ad,0ccd:10b6]
|
||||
80 -> PCTV DVB-S2 Stick (460e) (em28174) [2013:024c]
|
||||
81 -> Hauppauge WinTV HVR 930C (em2884) [2040:1605]
|
||||
82 -> Terratec Cinergy HTC Stick (em2884) [0ccd:00b2]
|
||||
83 -> Honestech Vidbox NW03 (em2860) [eb1a:5006]
|
||||
84 -> MaxMedia UB425-TC (em2874) [1b80:e425]
|
||||
85 -> PCTV QuatroStick (510e) (em2884) [2304:0242]
|
||||
86 -> PCTV QuatroStick nano (520e) (em2884) [2013:0251]
|
||||
87 -> Terratec Cinergy HTC USB XS (em2884) [0ccd:008e,0ccd:00ac]
|
||||
88 -> C3 Tech Digital Duo HDTV/SDTV USB (em2884) [1b80:e755]
|
||||
89 -> Delock 61959 (em2874) [1b80:e1cc]
|
||||
90 -> KWorld USB ATSC TV Stick UB435-Q V2 (em2874) [1b80:e346]
|
||||
91 -> SpeedLink Vicious And Devine Laplace webcam (em2765) [1ae7:9003,1ae7:9004]
|
||||
92 -> PCTV DVB-S2 Stick (461e) (em28178) [2013:0258]
|
||||
93 -> KWorld USB ATSC TV Stick UB435-Q V3 (em2874) [1b80:e34c]
|
||||
94 -> PCTV tripleStick (292e) (em28178) [2013:025f,2040:0264]
|
||||
95 -> Leadtek VC100 (em2861) [0413:6f07]
|
||||
96 -> Terratec Cinergy T2 Stick HD (em28178) [eb1a:8179]
|
||||
97 -> Elgato EyeTV Hybrid 2008 INT (em2884) [0fd9:0018]
|
||||
98 -> PLEX PX-BCUD (em28178) [3275:0085]
|
||||
99 -> Hauppauge WinTV-dualHD DVB (em28174) [2040:0265]
|
||||
=========== ==================================================================== ================ ==================================================================================================================================
|
||||
Card number Card name Empia Chip USB IDs
|
||||
=========== ==================================================================== ================ ==================================================================================================================================
|
||||
0 Unknown EM2800 video grabber em2800 eb1a:2800
|
||||
1 Unknown EM2750/28xx video grabber em2820 or em2840 eb1a:2710, eb1a:2820, eb1a:2821, eb1a:2860, eb1a:2861, eb1a:2862, eb1a:2863, eb1a:2870, eb1a:2881, eb1a:2883, eb1a:2868, eb1a:2875
|
||||
2 Terratec Cinergy 250 USB em2820 or em2840 0ccd:0036
|
||||
3 Pinnacle PCTV USB 2 em2820 or em2840 2304:0208
|
||||
4 Hauppauge WinTV USB 2 em2820 or em2840 2040:4200, 2040:4201
|
||||
5 MSI VOX USB 2.0 em2820 or em2840
|
||||
6 Terratec Cinergy 200 USB em2800
|
||||
7 Leadtek Winfast USB II em2800 0413:6023
|
||||
8 Kworld USB2800 em2800
|
||||
9 Pinnacle Dazzle DVC 90/100/101/107 / Kaiser Baas Video to DVD maker em2820 or em2840 1b80:e302, 1b80:e304, 2304:0207, 2304:021a, 093b:a003
|
||||
10 Hauppauge WinTV HVR 900 em2880 2040:6500
|
||||
11 Terratec Hybrid XS em2880
|
||||
12 Kworld PVR TV 2800 RF em2820 or em2840
|
||||
13 Terratec Prodigy XS em2880
|
||||
14 SIIG AVTuner-PVR / Pixelview Prolink PlayTV USB 2.0 em2820 or em2840
|
||||
15 V-Gear PocketTV em2800
|
||||
16 Hauppauge WinTV HVR 950 em2883 2040:6513, 2040:6517, 2040:651b
|
||||
17 Pinnacle PCTV HD Pro Stick em2880 2304:0227
|
||||
18 Hauppauge WinTV HVR 900 (R2) em2880 2040:6502
|
||||
19 EM2860/SAA711X Reference Design em2860
|
||||
20 AMD ATI TV Wonder HD 600 em2880 0438:b002
|
||||
21 eMPIA Technology, Inc. GrabBeeX+ Video Encoder em2800 eb1a:2801
|
||||
22 EM2710/EM2750/EM2751 webcam grabber em2750 eb1a:2750, eb1a:2751
|
||||
23 Huaqi DLCW-130 em2750
|
||||
24 D-Link DUB-T210 TV Tuner em2820 or em2840 2001:f112
|
||||
25 Gadmei UTV310 em2820 or em2840
|
||||
26 Hercules Smart TV USB 2.0 em2820 or em2840
|
||||
27 Pinnacle PCTV USB 2 (Philips FM1216ME) em2820 or em2840
|
||||
28 Leadtek Winfast USB II Deluxe em2820 or em2840
|
||||
29 EM2860/TVP5150 Reference Design em2860
|
||||
30 Videology 20K14XUSB USB2.0 em2820 or em2840
|
||||
31 Usbgear VD204v9 em2821
|
||||
32 Supercomp USB 2.0 TV em2821
|
||||
33 Elgato Video Capture em2860 0fd9:0033
|
||||
34 Terratec Cinergy A Hybrid XS em2860 0ccd:004f
|
||||
35 Typhoon DVD Maker em2860
|
||||
36 NetGMBH Cam em2860
|
||||
37 Gadmei UTV330 em2860 eb1a:50a6
|
||||
38 Yakumo MovieMixer em2861
|
||||
39 KWorld PVRTV 300U em2861 eb1a:e300
|
||||
40 Plextor ConvertX PX-TV100U em2861 093b:a005
|
||||
41 Kworld 350 U DVB-T em2870 eb1a:e350
|
||||
42 Kworld 355 U DVB-T em2870 eb1a:e355, eb1a:e357, eb1a:e359
|
||||
43 Terratec Cinergy T XS em2870
|
||||
44 Terratec Cinergy T XS (MT2060) em2870 0ccd:0043
|
||||
45 Pinnacle PCTV DVB-T em2870
|
||||
46 Compro, VideoMate U3 em2870 185b:2870
|
||||
47 KWorld DVB-T 305U em2880 eb1a:e305
|
||||
48 KWorld DVB-T 310U em2880
|
||||
49 MSI DigiVox A/D em2880 eb1a:e310
|
||||
50 MSI DigiVox A/D II em2880 eb1a:e320
|
||||
51 Terratec Hybrid XS Secam em2880 0ccd:004c
|
||||
52 DNT DA2 Hybrid em2881
|
||||
53 Pinnacle Hybrid Pro em2881
|
||||
54 Kworld VS-DVB-T 323UR em2882 eb1a:e323
|
||||
55 Terratec Cinnergy Hybrid T USB XS (em2882) em2882 0ccd:005e, 0ccd:0042
|
||||
56 Pinnacle Hybrid Pro (330e) em2882 2304:0226
|
||||
57 Kworld PlusTV HD Hybrid 330 em2883 eb1a:a316
|
||||
58 Compro VideoMate ForYou/Stereo em2820 or em2840 185b:2041
|
||||
59 Pinnacle PCTV HD Mini em2874 2304:023f
|
||||
60 Hauppauge WinTV HVR 850 em2883 2040:651f
|
||||
61 Pixelview PlayTV Box 4 USB 2.0 em2820 or em2840
|
||||
62 Gadmei TVR200 em2820 or em2840
|
||||
63 Kaiomy TVnPC U2 em2860 eb1a:e303
|
||||
64 Easy Cap Capture DC-60 em2860 1b80:e309
|
||||
65 IO-DATA GV-MVP/SZ em2820 or em2840 04bb:0515
|
||||
66 Empire dual TV em2880
|
||||
67 Terratec Grabby em2860 0ccd:0096, 0ccd:10AF
|
||||
68 Terratec AV350 em2860 0ccd:0084
|
||||
69 KWorld ATSC 315U HDTV TV Box em2882 eb1a:a313
|
||||
70 Evga inDtube em2882
|
||||
71 Silvercrest Webcam 1.3mpix em2820 or em2840
|
||||
72 Gadmei UTV330+ em2861
|
||||
73 Reddo DVB-C USB TV Box em2870
|
||||
74 Actionmaster/LinXcel/Digitus VC211A em2800
|
||||
75 Dikom DK300 em2882
|
||||
76 KWorld PlusTV 340U or UB435-Q (ATSC) em2870 1b80:a340
|
||||
77 EM2874 Leadership ISDBT em2874
|
||||
78 PCTV nanoStick T2 290e em28174 2013:024f
|
||||
79 Terratec Cinergy H5 em2884 eb1a:2885, 0ccd:10a2, 0ccd:10ad, 0ccd:10b6
|
||||
80 PCTV DVB-S2 Stick (460e) em28174 2013:024c
|
||||
81 Hauppauge WinTV HVR 930C em2884 2040:1605
|
||||
82 Terratec Cinergy HTC Stick em2884 0ccd:00b2
|
||||
83 Honestech Vidbox NW03 em2860 eb1a:5006
|
||||
84 MaxMedia UB425-TC em2874 1b80:e425
|
||||
85 PCTV QuatroStick (510e) em2884 2304:0242
|
||||
86 PCTV QuatroStick nano (520e) em2884 2013:0251
|
||||
87 Terratec Cinergy HTC USB XS em2884 0ccd:008e, 0ccd:00ac
|
||||
88 C3 Tech Digital Duo HDTV/SDTV USB em2884 1b80:e755
|
||||
89 Delock 61959 em2874 1b80:e1cc
|
||||
90 KWorld USB ATSC TV Stick UB435-Q V2 em2874 1b80:e346
|
||||
91 SpeedLink Vicious And Devine Laplace webcam em2765 1ae7:9003, 1ae7:9004
|
||||
92 PCTV DVB-S2 Stick (461e) em28178 2013:0258
|
||||
93 KWorld USB ATSC TV Stick UB435-Q V3 em2874 1b80:e34c
|
||||
94 PCTV tripleStick (292e) em28178 2013:025f, 2040:0264
|
||||
95 Leadtek VC100 em2861 0413:6f07
|
||||
96 Terratec Cinergy T2 Stick HD em28178 eb1a:8179
|
||||
97 Elgato EyeTV Hybrid 2008 INT em2884 0fd9:0018
|
||||
98 PLEX PX-BCUD em28178 3275:0085
|
||||
99 Hauppauge WinTV-dualHD DVB em28174 2040:0265
|
||||
=========== ==================================================================== ================ ==================================================================================================================================
|
||||
|
|
|
@ -6,407 +6,444 @@ The modules for the gspca webcam drivers are:
|
|||
- gspca_main: main driver
|
||||
- gspca\_\ *driver*: subdriver module with *driver* as follows
|
||||
|
||||
========= ========= ====================================================================
|
||||
========= ========= ===================================================================
|
||||
*driver* vend:prod Device
|
||||
========= ========= ====================================================================
|
||||
spca501 0000:0000 MystFromOri Unknown Camera
|
||||
spca508 0130:0130 Clone Digital Webcam 11043
|
||||
zc3xx 03f0:1b07 HP Premium Starter Cam
|
||||
m5602 0402:5602 ALi Video Camera Controller
|
||||
spca501 040a:0002 Kodak DVC-325
|
||||
spca500 040a:0300 Kodak EZ200
|
||||
zc3xx 041e:041e Creative WebCam Live!
|
||||
ov519 041e:4003 Video Blaster WebCam Go Plus
|
||||
spca500 041e:400a Creative PC-CAM 300
|
||||
sunplus 041e:400b Creative PC-CAM 600
|
||||
sunplus 041e:4012 PC-Cam350
|
||||
sunplus 041e:4013 Creative Pccam750
|
||||
zc3xx 041e:4017 Creative Webcam Mobile PD1090
|
||||
spca508 041e:4018 Creative Webcam Vista (PD1100)
|
||||
spca561 041e:401a Creative Webcam Vista (PD1100)
|
||||
zc3xx 041e:401c Creative NX
|
||||
spca505 041e:401d Creative Webcam NX ULTRA
|
||||
zc3xx 041e:401e Creative Nx Pro
|
||||
zc3xx 041e:401f Creative Webcam Notebook PD1171
|
||||
pac207 041e:4028 Creative Webcam Vista Plus
|
||||
zc3xx 041e:4029 Creative WebCam Vista Pro
|
||||
zc3xx 041e:4034 Creative Instant P0620
|
||||
zc3xx 041e:4035 Creative Instant P0620D
|
||||
zc3xx 041e:4036 Creative Live !
|
||||
sq930x 041e:4038 Creative Joy-IT
|
||||
zc3xx 041e:403a Creative Nx Pro 2
|
||||
spca561 041e:403b Creative Webcam Vista (VF0010)
|
||||
sq930x 041e:403c Creative Live! Ultra
|
||||
sq930x 041e:403d Creative Live! Ultra for Notebooks
|
||||
sq930x 041e:4041 Creative Live! Motion
|
||||
zc3xx 041e:4051 Creative Live!Cam Notebook Pro (VF0250)
|
||||
ov519 041e:4052 Creative Live! VISTA IM
|
||||
zc3xx 041e:4053 Creative Live!Cam Video IM
|
||||
vc032x 041e:405b Creative Live! Cam Notebook Ultra (VC0130)
|
||||
ov519 041e:405f Creative Live! VISTA VF0330
|
||||
ov519 041e:4060 Creative Live! VISTA VF0350
|
||||
ov519 041e:4061 Creative Live! VISTA VF0400
|
||||
ov519 041e:4064 Creative Live! VISTA VF0420
|
||||
ov519 041e:4067 Creative Live! Cam Video IM (VF0350)
|
||||
ov519 041e:4068 Creative Live! VISTA VF0470
|
||||
spca561 0458:7004 Genius VideoCAM Express V2
|
||||
sn9c2028 0458:7005 Genius Smart 300, version 2
|
||||
sunplus 0458:7006 Genius Dsc 1.3 Smart
|
||||
zc3xx 0458:7007 Genius VideoCam V2
|
||||
zc3xx 0458:700c Genius VideoCam V3
|
||||
zc3xx 0458:700f Genius VideoCam Web V2
|
||||
sonixj 0458:7025 Genius Eye 311Q
|
||||
sn9c20x 0458:7029 Genius Look 320s
|
||||
sonixj 0458:702e Genius Slim 310 NB
|
||||
sn9c20x 0458:7045 Genius Look 1320 V2
|
||||
sn9c20x 0458:704a Genius Slim 1320
|
||||
sn9c20x 0458:704c Genius i-Look 1321
|
||||
sn9c20x 045e:00f4 LifeCam VX-6000 (SN9C20x + OV9650)
|
||||
sonixj 045e:00f5 MicroSoft VX3000
|
||||
sonixj 045e:00f7 MicroSoft VX1000
|
||||
ov519 045e:028c Micro$oft xbox cam
|
||||
spca508 0461:0815 Micro Innovation IC200
|
||||
sunplus 0461:0821 Fujifilm MV-1
|
||||
zc3xx 0461:0a00 MicroInnovation WebCam320
|
||||
stv06xx 046d:0840 QuickCam Express
|
||||
stv06xx 046d:0850 LEGO cam / QuickCam Web
|
||||
stv06xx 046d:0870 Dexxa WebCam USB
|
||||
spca500 046d:0890 Logitech QuickCam traveler
|
||||
vc032x 046d:0892 Logitech Orbicam
|
||||
vc032x 046d:0896 Logitech Orbicam
|
||||
vc032x 046d:0897 Logitech QuickCam for Dell notebooks
|
||||
zc3xx 046d:089d Logitech QuickCam E2500
|
||||
zc3xx 046d:08a0 Logitech QC IM
|
||||
zc3xx 046d:08a1 Logitech QC IM 0x08A1 +sound
|
||||
zc3xx 046d:08a2 Labtec Webcam Pro
|
||||
zc3xx 046d:08a3 Logitech QC Chat
|
||||
zc3xx 046d:08a6 Logitech QCim
|
||||
zc3xx 046d:08a7 Logitech QuickCam Image
|
||||
zc3xx 046d:08a9 Logitech Notebook Deluxe
|
||||
zc3xx 046d:08aa Labtec Webcam Notebook
|
||||
zc3xx 046d:08ac Logitech QuickCam Cool
|
||||
zc3xx 046d:08ad Logitech QCCommunicate STX
|
||||
zc3xx 046d:08ae Logitech QuickCam for Notebooks
|
||||
zc3xx 046d:08af Logitech QuickCam Cool
|
||||
zc3xx 046d:08b9 Logitech QuickCam Express
|
||||
zc3xx 046d:08d7 Logitech QCam STX
|
||||
zc3xx 046d:08d9 Logitech QuickCam IM/Connect
|
||||
zc3xx 046d:08d8 Logitech Notebook Deluxe
|
||||
zc3xx 046d:08da Logitech QuickCam Messenger
|
||||
zc3xx 046d:08dd Logitech QuickCam for Notebooks
|
||||
spca500 046d:0900 Logitech Inc. ClickSmart 310
|
||||
spca500 046d:0901 Logitech Inc. ClickSmart 510
|
||||
sunplus 046d:0905 Logitech ClickSmart 820
|
||||
tv8532 046d:0920 Logitech QuickCam Express
|
||||
tv8532 046d:0921 Labtec Webcam
|
||||
spca561 046d:0928 Logitech QC Express Etch2
|
||||
spca561 046d:0929 Labtec Webcam Elch2
|
||||
spca561 046d:092a Logitech QC for Notebook
|
||||
spca561 046d:092b Labtec Webcam Plus
|
||||
spca561 046d:092c Logitech QC chat Elch2
|
||||
spca561 046d:092d Logitech QC Elch2
|
||||
spca561 046d:092e Logitech QC Elch2
|
||||
spca561 046d:092f Logitech QuickCam Express Plus
|
||||
sunplus 046d:0960 Logitech ClickSmart 420
|
||||
nw80x 046d:d001 Logitech QuickCam Pro (dark focus ring)
|
||||
sunplus 0471:0322 Philips DMVC1300K
|
||||
zc3xx 0471:0325 Philips SPC 200 NC
|
||||
zc3xx 0471:0326 Philips SPC 300 NC
|
||||
sonixj 0471:0327 Philips SPC 600 NC
|
||||
sonixj 0471:0328 Philips SPC 700 NC
|
||||
zc3xx 0471:032d Philips SPC 210 NC
|
||||
zc3xx 0471:032e Philips SPC 315 NC
|
||||
sonixj 0471:0330 Philips SPC 710 NC
|
||||
spca501 0497:c001 Smile International
|
||||
sunplus 04a5:3003 Benq DC 1300
|
||||
sunplus 04a5:3008 Benq DC 1500
|
||||
sunplus 04a5:300a Benq DC 3410
|
||||
spca500 04a5:300c Benq DC 1016
|
||||
benq 04a5:3035 Benq DC E300
|
||||
finepix 04cb:0104 Fujifilm FinePix 4800
|
||||
finepix 04cb:0109 Fujifilm FinePix A202
|
||||
finepix 04cb:010b Fujifilm FinePix A203
|
||||
finepix 04cb:010f Fujifilm FinePix A204
|
||||
finepix 04cb:0111 Fujifilm FinePix A205
|
||||
finepix 04cb:0113 Fujifilm FinePix A210
|
||||
finepix 04cb:0115 Fujifilm FinePix A303
|
||||
finepix 04cb:0117 Fujifilm FinePix A310
|
||||
finepix 04cb:0119 Fujifilm FinePix F401
|
||||
finepix 04cb:011b Fujifilm FinePix F402
|
||||
finepix 04cb:011d Fujifilm FinePix F410
|
||||
finepix 04cb:0121 Fujifilm FinePix F601
|
||||
finepix 04cb:0123 Fujifilm FinePix F700
|
||||
finepix 04cb:0125 Fujifilm FinePix M603
|
||||
finepix 04cb:0127 Fujifilm FinePix S300
|
||||
finepix 04cb:0129 Fujifilm FinePix S304
|
||||
finepix 04cb:012b Fujifilm FinePix S500
|
||||
finepix 04cb:012d Fujifilm FinePix S602
|
||||
finepix 04cb:012f Fujifilm FinePix S700
|
||||
finepix 04cb:0131 Fujifilm FinePix unknown model
|
||||
finepix 04cb:013b Fujifilm FinePix unknown model
|
||||
finepix 04cb:013d Fujifilm FinePix unknown model
|
||||
finepix 04cb:013f Fujifilm FinePix F420
|
||||
sunplus 04f1:1001 JVC GC A50
|
||||
spca561 04fc:0561 Flexcam 100
|
||||
spca1528 04fc:1528 Sunplus MD80 clone
|
||||
sunplus 04fc:500c Sunplus CA500C
|
||||
sunplus 04fc:504a Aiptek Mini PenCam 1.3
|
||||
sunplus 04fc:504b Maxell MaxPocket LE 1.3
|
||||
sunplus 04fc:5330 Digitrex 2110
|
||||
sunplus 04fc:5360 Sunplus Generic
|
||||
spca500 04fc:7333 PalmPixDC85
|
||||
sunplus 04fc:ffff Pure DigitalDakota
|
||||
nw80x 0502:d001 DVC V6
|
||||
spca501 0506:00df 3Com HomeConnect Lite
|
||||
sunplus 052b:1507 Megapixel 5 Pretec DC-1007
|
||||
sunplus 052b:1513 Megapix V4
|
||||
sunplus 052b:1803 MegaImage VI
|
||||
nw80x 052b:d001 EZCam Pro p35u
|
||||
tv8532 0545:808b Veo Stingray
|
||||
tv8532 0545:8333 Veo Stingray
|
||||
sunplus 0546:3155 Polaroid PDC3070
|
||||
sunplus 0546:3191 Polaroid Ion 80
|
||||
sunplus 0546:3273 Polaroid PDC2030
|
||||
ov519 054c:0154 Sonny toy4
|
||||
ov519 054c:0155 Sonny toy5
|
||||
cpia1 0553:0002 CPIA CPiA (version1) based cameras
|
||||
zc3xx 055f:c005 Mustek Wcam300A
|
||||
spca500 055f:c200 Mustek Gsmart 300
|
||||
sunplus 055f:c211 Kowa Bs888e Microcamera
|
||||
spca500 055f:c220 Gsmart Mini
|
||||
sunplus 055f:c230 Mustek Digicam 330K
|
||||
sunplus 055f:c232 Mustek MDC3500
|
||||
sunplus 055f:c360 Mustek DV4000 Mpeg4
|
||||
sunplus 055f:c420 Mustek gSmart Mini 2
|
||||
sunplus 055f:c430 Mustek Gsmart LCD 2
|
||||
sunplus 055f:c440 Mustek DV 3000
|
||||
sunplus 055f:c520 Mustek gSmart Mini 3
|
||||
sunplus 055f:c530 Mustek Gsmart LCD 3
|
||||
sunplus 055f:c540 Gsmart D30
|
||||
sunplus 055f:c630 Mustek MDC4000
|
||||
sunplus 055f:c650 Mustek MDC5500Z
|
||||
nw80x 055f:d001 Mustek Wcam 300 mini
|
||||
zc3xx 055f:d003 Mustek WCam300A
|
||||
zc3xx 055f:d004 Mustek WCam300 AN
|
||||
conex 0572:0041 Creative Notebook cx11646
|
||||
ov519 05a9:0511 Video Blaster WebCam 3/WebCam Plus, D-Link USB Digital Video Camera
|
||||
ov519 05a9:0518 Creative WebCam
|
||||
ov519 05a9:0519 OV519 Microphone
|
||||
ov519 05a9:0530 OmniVision
|
||||
ov534_9 05a9:1550 OmniVision VEHO Filmscanner
|
||||
ov519 05a9:2800 OmniVision SuperCAM
|
||||
ov519 05a9:4519 Webcam Classic
|
||||
ov534_9 05a9:8065 OmniVision test kit ov538+ov9712
|
||||
ov519 05a9:8519 OmniVision
|
||||
ov519 05a9:a511 D-Link USB Digital Video Camera
|
||||
ov519 05a9:a518 D-Link DSB-C310 Webcam
|
||||
sunplus 05da:1018 Digital Dream Enigma 1.3
|
||||
stk014 05e1:0893 Syntek DV4000
|
||||
gl860 05e3:0503 Genesys Logic PC Camera
|
||||
gl860 05e3:f191 Genesys Logic PC Camera
|
||||
spca561 060b:a001 Maxell Compact Pc PM3
|
||||
zc3xx 0698:2003 CTX M730V built in
|
||||
topro 06a2:0003 TP6800 PC Camera, CmoX CX0342 webcam
|
||||
topro 06a2:6810 Creative Qmax
|
||||
nw80x 06a5:0000 Typhoon Webcam 100 USB
|
||||
nw80x 06a5:d001 Divio based webcams
|
||||
nw80x 06a5:d800 Divio Chicony TwinkleCam, Trust SpaceCam
|
||||
spca500 06bd:0404 Agfa CL20
|
||||
spca500 06be:0800 Optimedia
|
||||
nw80x 06be:d001 EZCam Pro p35u
|
||||
sunplus 06d6:0031 Trust 610 LCD PowerC@m Zoom
|
||||
spca506 06e1:a190 ADS Instant VCD
|
||||
ov534 06f8:3002 Hercules Blog Webcam
|
||||
ov534_9 06f8:3003 Hercules Dualpix HD Weblog
|
||||
sonixj 06f8:3004 Hercules Classic Silver
|
||||
sonixj 06f8:3008 Hercules Deluxe Optical Glass
|
||||
pac7302 06f8:3009 Hercules Classic Link
|
||||
pac7302 06f8:301b Hercules Link
|
||||
nw80x 0728:d001 AVerMedia Camguard
|
||||
spca508 0733:0110 ViewQuest VQ110
|
||||
spca501 0733:0401 Intel Create and Share
|
||||
spca501 0733:0402 ViewQuest M318B
|
||||
spca505 0733:0430 Intel PC Camera Pro
|
||||
sunplus 0733:1311 Digital Dream Epsilon 1.3
|
||||
sunplus 0733:1314 Mercury 2.1MEG Deluxe Classic Cam
|
||||
sunplus 0733:2211 Jenoptik jdc 21 LCD
|
||||
sunplus 0733:2221 Mercury Digital Pro 3.1p
|
||||
sunplus 0733:3261 Concord 3045 spca536a
|
||||
sunplus 0733:3281 Cyberpix S550V
|
||||
spca506 0734:043b 3DeMon USB Capture aka
|
||||
cpia1 0813:0001 QX3 camera
|
||||
ov519 0813:0002 Dual Mode USB Camera Plus
|
||||
spca500 084d:0003 D-Link DSC-350
|
||||
spca500 08ca:0103 Aiptek PocketDV
|
||||
sunplus 08ca:0104 Aiptek PocketDVII 1.3
|
||||
sunplus 08ca:0106 Aiptek Pocket DV3100+
|
||||
mr97310a 08ca:0110 Trust Spyc@m 100
|
||||
mr97310a 08ca:0111 Aiptek PenCam VGA+
|
||||
sunplus 08ca:2008 Aiptek Mini PenCam 2 M
|
||||
sunplus 08ca:2010 Aiptek PocketCam 3M
|
||||
sunplus 08ca:2016 Aiptek PocketCam 2 Mega
|
||||
sunplus 08ca:2018 Aiptek Pencam SD 2M
|
||||
sunplus 08ca:2020 Aiptek Slim 3000F
|
||||
sunplus 08ca:2022 Aiptek Slim 3200
|
||||
sunplus 08ca:2024 Aiptek DV3500 Mpeg4
|
||||
sunplus 08ca:2028 Aiptek PocketCam4M
|
||||
sunplus 08ca:2040 Aiptek PocketDV4100M
|
||||
sunplus 08ca:2042 Aiptek PocketDV5100
|
||||
sunplus 08ca:2050 Medion MD 41437
|
||||
sunplus 08ca:2060 Aiptek PocketDV5300
|
||||
tv8532 0923:010f ICM532 cams
|
||||
mars 093a:050f Mars-Semi Pc-Camera
|
||||
mr97310a 093a:010e All known CIF cams with this ID
|
||||
mr97310a 093a:010f All known VGA cams with this ID
|
||||
pac207 093a:2460 Qtec Webcam 100
|
||||
pac207 093a:2461 HP Webcam
|
||||
pac207 093a:2463 Philips SPC 220 NC
|
||||
pac207 093a:2464 Labtec Webcam 1200
|
||||
pac207 093a:2468 Webcam WB-1400T
|
||||
pac207 093a:2470 Genius GF112
|
||||
pac207 093a:2471 Genius VideoCam ge111
|
||||
pac207 093a:2472 Genius VideoCam ge110
|
||||
pac207 093a:2474 Genius iLook 111
|
||||
pac207 093a:2476 Genius e-Messenger 112
|
||||
pac7311 093a:2600 PAC7311 Typhoon
|
||||
pac7311 093a:2601 Philips SPC 610 NC
|
||||
pac7311 093a:2603 Philips SPC 500 NC
|
||||
pac7311 093a:2608 Trust WB-3300p
|
||||
pac7311 093a:260e Gigaware VGA PC Camera, Trust WB-3350p, SIGMA cam 2350
|
||||
pac7311 093a:260f SnakeCam
|
||||
pac7302 093a:2620 Apollo AC-905
|
||||
pac7302 093a:2621 PAC731x
|
||||
pac7302 093a:2622 Genius Eye 312
|
||||
pac7302 093a:2624 PAC7302
|
||||
pac7302 093a:2625 Genius iSlim 310
|
||||
pac7302 093a:2626 Labtec 2200
|
||||
pac7302 093a:2627 Genius FaceCam 300
|
||||
pac7302 093a:2628 Genius iLook 300
|
||||
pac7302 093a:2629 Genious iSlim 300
|
||||
pac7302 093a:262a Webcam 300k
|
||||
pac7302 093a:262c Philips SPC 230 NC
|
||||
jl2005bcd 0979:0227 Various brands, 19 known cameras supported
|
||||
jeilinj 0979:0280 Sakar 57379
|
||||
jeilinj 0979:0280 Sportscam DV15
|
||||
zc3xx 0ac8:0302 Z-star Vimicro zc0302
|
||||
vc032x 0ac8:0321 Vimicro generic vc0321
|
||||
vc032x 0ac8:0323 Vimicro Vc0323
|
||||
vc032x 0ac8:0328 A4Tech PK-130MG
|
||||
zc3xx 0ac8:301b Z-Star zc301b
|
||||
zc3xx 0ac8:303b Vimicro 0x303b
|
||||
zc3xx 0ac8:305b Z-star Vimicro zc0305b
|
||||
zc3xx 0ac8:307b PC Camera (ZS0211)
|
||||
vc032x 0ac8:c001 Sony embedded vimicro
|
||||
vc032x 0ac8:c002 Sony embedded vimicro
|
||||
vc032x 0ac8:c301 Samsung Q1 Ultra Premium
|
||||
spca508 0af9:0010 Hama USB Sightcam 100
|
||||
spca508 0af9:0011 Hama USB Sightcam 100
|
||||
ov519 0b62:0059 iBOT2 Webcam
|
||||
sonixb 0c45:6001 Genius VideoCAM NB
|
||||
sonixb 0c45:6005 Microdia Sweex Mini Webcam
|
||||
sonixb 0c45:6007 Sonix sn9c101 + Tas5110D
|
||||
sonixb 0c45:6009 spcaCam@120
|
||||
sonixb 0c45:600d spcaCam@120
|
||||
sonixb 0c45:6011 Microdia PC Camera (SN9C102)
|
||||
sonixb 0c45:6019 Generic Sonix OV7630
|
||||
sonixb 0c45:6024 Generic Sonix Tas5130c
|
||||
sonixb 0c45:6025 Xcam Shanga
|
||||
sonixb 0c45:6028 Sonix Btc Pc380
|
||||
sonixb 0c45:6029 spcaCam@150
|
||||
sonixb 0c45:602c Generic Sonix OV7630
|
||||
sonixb 0c45:602d LIC-200 LG
|
||||
sonixb 0c45:602e Genius VideoCam Messenger
|
||||
sonixj 0c45:6040 Speed NVC 350K
|
||||
sonixj 0c45:607c Sonix sn9c102p Hv7131R
|
||||
sonixj 0c45:60c0 Sangha Sn535
|
||||
sonixj 0c45:60ce USB-PC-Camera-168 (TALK-5067)
|
||||
sonixj 0c45:60ec SN9C105+MO4000
|
||||
sonixj 0c45:60fb Surfer NoName
|
||||
sonixj 0c45:60fc LG-LIC300
|
||||
sonixj 0c45:60fe Microdia Audio
|
||||
sonixj 0c45:6100 PC Camera (SN9C128)
|
||||
sonixj 0c45:6102 PC Camera (SN9C128)
|
||||
sonixj 0c45:610a PC Camera (SN9C128)
|
||||
sonixj 0c45:610b PC Camera (SN9C128)
|
||||
sonixj 0c45:610c PC Camera (SN9C128)
|
||||
sonixj 0c45:610e PC Camera (SN9C128)
|
||||
sonixj 0c45:6128 Microdia/Sonix SNP325
|
||||
sonixj 0c45:612a Avant Camera
|
||||
sonixj 0c45:612b Speed-Link REFLECT2
|
||||
sonixj 0c45:612c Typhoon Rasy Cam 1.3MPix
|
||||
sonixj 0c45:6130 Sonix Pccam
|
||||
sonixj 0c45:6138 Sn9c120 Mo4000
|
||||
sonixj 0c45:613a Microdia Sonix PC Camera
|
||||
sonixj 0c45:613b Surfer SN-206
|
||||
sonixj 0c45:613c Sonix Pccam168
|
||||
sonixj 0c45:6142 Hama PC-Webcam AC-150
|
||||
sonixj 0c45:6143 Sonix Pccam168
|
||||
sonixj 0c45:6148 Digitus DA-70811/ZSMC USB PC Camera ZS211/Microdia
|
||||
sonixj 0c45:614a Frontech E-Ccam (JIL-2225)
|
||||
sn9c20x 0c45:6240 PC Camera (SN9C201 + MT9M001)
|
||||
sn9c20x 0c45:6242 PC Camera (SN9C201 + MT9M111)
|
||||
sn9c20x 0c45:6248 PC Camera (SN9C201 + OV9655)
|
||||
sn9c20x 0c45:624c PC Camera (SN9C201 + MT9M112)
|
||||
sn9c20x 0c45:624e PC Camera (SN9C201 + SOI968)
|
||||
sn9c20x 0c45:624f PC Camera (SN9C201 + OV9650)
|
||||
sn9c20x 0c45:6251 PC Camera (SN9C201 + OV9650)
|
||||
sn9c20x 0c45:6253 PC Camera (SN9C201 + OV9650)
|
||||
sn9c20x 0c45:6260 PC Camera (SN9C201 + OV7670)
|
||||
sn9c20x 0c45:6270 PC Camera (SN9C201 + MT9V011/MT9V111/MT9V112)
|
||||
sn9c20x 0c45:627b PC Camera (SN9C201 + OV7660)
|
||||
sn9c20x 0c45:627c PC Camera (SN9C201 + HV7131R)
|
||||
sn9c20x 0c45:627f PC Camera (SN9C201 + OV9650)
|
||||
sn9c20x 0c45:6280 PC Camera (SN9C202 + MT9M001)
|
||||
sn9c20x 0c45:6282 PC Camera (SN9C202 + MT9M111)
|
||||
sn9c20x 0c45:6288 PC Camera (SN9C202 + OV9655)
|
||||
sn9c20x 0c45:628c PC Camera (SN9C201 + MT9M112)
|
||||
sn9c20x 0c45:628e PC Camera (SN9C202 + SOI968)
|
||||
sn9c20x 0c45:628f PC Camera (SN9C202 + OV9650)
|
||||
sn9c20x 0c45:62a0 PC Camera (SN9C202 + OV7670)
|
||||
sn9c20x 0c45:62b0 PC Camera (SN9C202 + MT9V011/MT9V111/MT9V112)
|
||||
sn9c20x 0c45:62b3 PC Camera (SN9C202 + OV9655)
|
||||
sn9c20x 0c45:62bb PC Camera (SN9C202 + OV7660)
|
||||
sn9c20x 0c45:62bc PC Camera (SN9C202 + HV7131R)
|
||||
sn9c2028 0c45:8001 Wild Planet Digital Spy Camera
|
||||
sn9c2028 0c45:8003 Sakar #11199, #6637x, #67480 keychain cams
|
||||
sn9c2028 0c45:8008 Mini-Shotz ms-350
|
||||
sn9c2028 0c45:800a Vivitar Vivicam 3350B
|
||||
sunplus 0d64:0303 Sunplus FashionCam DXG
|
||||
ov519 0e96:c001 TRUST 380 USB2 SPACEC@M
|
||||
etoms 102c:6151 Qcam Sangha CIF
|
||||
etoms 102c:6251 Qcam xxxxxx VGA
|
||||
ov519 1046:9967 W9967CF/W9968CF WebCam IC, Video Blaster WebCam Go
|
||||
zc3xx 10fd:0128 Typhoon Webshot II USB 300k 0x0128
|
||||
spca561 10fd:7e50 FlyCam Usb 100
|
||||
zc3xx 10fd:8050 Typhoon Webshot II USB 300k
|
||||
ov534 1415:2000 Sony HD Eye for PS3 (SLEH 00201)
|
||||
pac207 145f:013a Trust WB-1300N
|
||||
sn9c20x 145f:013d Trust WB-3600R
|
||||
vc032x 15b8:6001 HP 2.0 Megapixel
|
||||
vc032x 15b8:6002 HP 2.0 Megapixel rz406aa
|
||||
spca501 1776:501c Arowana 300K CMOS Camera
|
||||
t613 17a1:0128 TASCORP JPEG Webcam, NGS Cyclops
|
||||
vc032x 17ef:4802 Lenovo Vc0323+MI1310_SOC
|
||||
pac207 2001:f115 D-Link DSB-C120
|
||||
sq905c 2770:9050 Disney pix micro (CIF)
|
||||
sq905c 2770:9051 Lego Bionicle
|
||||
sq905c 2770:9052 Disney pix micro 2 (VGA)
|
||||
sq905c 2770:905c All 11 known cameras with this ID
|
||||
sq905 2770:9120 All 24 known cameras with this ID
|
||||
sq905c 2770:913d All 4 known cameras with this ID
|
||||
sq930x 2770:930b Sweex Motion Tracking / I-Tec iCam Tracer
|
||||
sq930x 2770:930c Trust WB-3500T / NSG Robbie 2.0
|
||||
spca500 2899:012c Toptro Industrial
|
||||
ov519 8020:ef04 ov519
|
||||
spca508 8086:0110 Intel Easy PC Camera
|
||||
spca500 8086:0630 Intel Pocket PC Camera
|
||||
spca506 99fa:8988 Grandtec V.cap
|
||||
sn9c20x a168:0610 Dino-Lite Digital Microscope (SN9C201 + HV7131R)
|
||||
sn9c20x a168:0611 Dino-Lite Digital Microscope (SN9C201 + HV7131R)
|
||||
sn9c20x a168:0613 Dino-Lite Digital Microscope (SN9C201 + HV7131R)
|
||||
sn9c20x a168:0618 Dino-Lite Digital Microscope (SN9C201 + HV7131R)
|
||||
sn9c20x a168:0614 Dino-Lite Digital Microscope (SN9C201 + MT9M111)
|
||||
sn9c20x a168:0615 Dino-Lite Digital Microscope (SN9C201 + MT9M111)
|
||||
sn9c20x a168:0617 Dino-Lite Digital Microscope (SN9C201 + MT9M111)
|
||||
spca561 abcd:cdee Petcam
|
||||
========= ========= ====================================================================
|
||||
========= ========= ===================================================================
|
||||
spca501 0000:0000 MystFromOri Unknown Camera
|
||||
spca508 0130:0130 Clone Digital Webcam 11043
|
||||
se401 03e8:0004 Endpoints/AoxSE401
|
||||
zc3xx 03f0:1b07 HP Premium Starter Cam
|
||||
m5602 0402:5602 ALi Video Camera Controller
|
||||
spca501 040a:0002 Kodak DVC-325
|
||||
spca500 040a:0300 Kodak EZ200
|
||||
zc3xx 041e:041e Creative WebCam Live!
|
||||
ov519 041e:4003 Video Blaster WebCam Go Plus
|
||||
stv0680 041e:4007 Go Mini
|
||||
spca500 041e:400a Creative PC-CAM 300
|
||||
sunplus 041e:400b Creative PC-CAM 600
|
||||
sunplus 041e:4012 PC-Cam350
|
||||
sunplus 041e:4013 Creative Pccam750
|
||||
zc3xx 041e:4017 Creative Webcam Mobile PD1090
|
||||
spca508 041e:4018 Creative Webcam Vista (PD1100)
|
||||
spca561 041e:401a Creative Webcam Vista (PD1100)
|
||||
zc3xx 041e:401c Creative NX
|
||||
spca505 041e:401d Creative Webcam NX ULTRA
|
||||
zc3xx 041e:401e Creative Nx Pro
|
||||
zc3xx 041e:401f Creative Webcam Notebook PD1171
|
||||
zc3xx 041e:4022 Webcam NX Pro
|
||||
pac207 041e:4028 Creative Webcam Vista Plus
|
||||
zc3xx 041e:4029 Creative WebCam Vista Pro
|
||||
zc3xx 041e:4034 Creative Instant P0620
|
||||
zc3xx 041e:4035 Creative Instant P0620D
|
||||
zc3xx 041e:4036 Creative Live !
|
||||
sq930x 041e:4038 Creative Joy-IT
|
||||
zc3xx 041e:403a Creative Nx Pro 2
|
||||
spca561 041e:403b Creative Webcam Vista (VF0010)
|
||||
sq930x 041e:403c Creative Live! Ultra
|
||||
sq930x 041e:403d Creative Live! Ultra for Notebooks
|
||||
sq930x 041e:4041 Creative Live! Motion
|
||||
zc3xx 041e:4051 Creative Live!Cam Notebook Pro (VF0250)
|
||||
ov519 041e:4052 Creative Live! VISTA IM
|
||||
zc3xx 041e:4053 Creative Live!Cam Video IM
|
||||
vc032x 041e:405b Creative Live! Cam Notebook Ultra (VC0130)
|
||||
ov519 041e:405f Creative Live! VISTA VF0330
|
||||
ov519 041e:4060 Creative Live! VISTA VF0350
|
||||
ov519 041e:4061 Creative Live! VISTA VF0400
|
||||
ov519 041e:4064 Creative Live! VISTA VF0420
|
||||
ov519 041e:4067 Creative Live! Cam Video IM (VF0350)
|
||||
ov519 041e:4068 Creative Live! VISTA VF0470
|
||||
sn9c2028 0458:7003 GeniusVideocam Live v2
|
||||
spca561 0458:7004 Genius VideoCAM Express V2
|
||||
sn9c2028 0458:7005 Genius Smart 300, version 2
|
||||
sunplus 0458:7006 Genius Dsc 1.3 Smart
|
||||
zc3xx 0458:7007 Genius VideoCam V2
|
||||
zc3xx 0458:700c Genius VideoCam V3
|
||||
zc3xx 0458:700f Genius VideoCam Web V2
|
||||
sonixj 0458:7025 Genius Eye 311Q
|
||||
sn9c20x 0458:7029 Genius Look 320s
|
||||
sonixj 0458:702e Genius Slim 310 NB
|
||||
sn9c20x 0458:7045 Genius Look 1320 V2
|
||||
sn9c20x 0458:704a Genius Slim 1320
|
||||
sn9c20x 0458:704c Genius i-Look 1321
|
||||
sn9c20x 045e:00f4 LifeCam VX-6000 (SN9C20x + OV9650)
|
||||
sonixj 045e:00f5 MicroSoft VX3000
|
||||
sonixj 045e:00f7 MicroSoft VX1000
|
||||
ov519 045e:028c Micro$oft xbox cam
|
||||
kinect 045e:02ae Xbox NUI Camera
|
||||
kinect 045e:02bf Kinect for Windows NUI Camera
|
||||
spca561 0461:0815 Micro Innovations IC200 Webcam
|
||||
sunplus 0461:0821 Fujifilm MV-1
|
||||
zc3xx 0461:0a00 MicroInnovation WebCam320
|
||||
stv06xx 046D:08F0 QuickCamMessenger
|
||||
stv06xx 046D:08F5 QuickCamCommunicate
|
||||
stv06xx 046D:08F6 QuickCamMessenger (new)
|
||||
stv06xx 046d:0840 QuickCamExpress
|
||||
stv06xx 046d:0850 LEGOcam / QuickCam Web
|
||||
stv06xx 046d:0870 DexxaWebCam USB
|
||||
spca500 046d:0890 Logitech QuickCam traveler
|
||||
vc032x 046d:0892 Logitech Orbicam
|
||||
vc032x 046d:0896 Logitech Orbicam
|
||||
vc032x 046d:0897 Logitech QuickCam for Dell notebooks
|
||||
zc3xx 046d:089d Logitech QuickCam E2500
|
||||
zc3xx 046d:08a0 Logitech QC IM
|
||||
zc3xx 046d:08a1 Logitech QC IM 0x08A1 +sound
|
||||
zc3xx 046d:08a2 Labtec Webcam Pro
|
||||
zc3xx 046d:08a3 Logitech QC Chat
|
||||
zc3xx 046d:08a6 Logitech QCim
|
||||
zc3xx 046d:08a7 Logitech QuickCam Image
|
||||
zc3xx 046d:08a9 Logitech Notebook Deluxe
|
||||
zc3xx 046d:08aa Labtec Webcam Notebook
|
||||
zc3xx 046d:08ac Logitech QuickCam Cool
|
||||
zc3xx 046d:08ad Logitech QCCommunicate STX
|
||||
zc3xx 046d:08ae Logitech QuickCam for Notebooks
|
||||
zc3xx 046d:08af Logitech QuickCam Cool
|
||||
zc3xx 046d:08b9 Logitech QuickCam Express
|
||||
zc3xx 046d:08d7 Logitech QCam STX
|
||||
zc3xx 046d:08d8 Logitech Notebook Deluxe
|
||||
zc3xx 046d:08d9 Logitech QuickCam IM/Connect
|
||||
zc3xx 046d:08da Logitech QuickCam Messenger
|
||||
zc3xx 046d:08dd Logitech QuickCam for Notebooks
|
||||
spca500 046d:0900 Logitech Inc. ClickSmart 310
|
||||
spca500 046d:0901 Logitech Inc. ClickSmart 510
|
||||
sunplus 046d:0905 Logitech ClickSmart 820
|
||||
tv8532 046d:0920 Logitech QuickCam Express
|
||||
tv8532 046d:0921 Labtec Webcam
|
||||
spca561 046d:0928 Logitech QC Express Etch2
|
||||
spca561 046d:0929 Labtec Webcam Elch2
|
||||
spca561 046d:092a Logitech QC for Notebook
|
||||
spca561 046d:092b Labtec Webcam Plus
|
||||
spca561 046d:092c Logitech QC chat Elch2
|
||||
spca561 046d:092d Logitech QC Elch2
|
||||
spca561 046d:092e Logitech QC Elch2
|
||||
spca561 046d:092f Logitech QuickCam Express Plus
|
||||
sunplus 046d:0960 Logitech ClickSmart 420
|
||||
nw80x 046d:d001 Logitech QuickCam Pro (dark focus ring)
|
||||
se401 0471:030b PhilipsPCVC665K
|
||||
sunplus 0471:0322 Philips DMVC1300K
|
||||
zc3xx 0471:0325 Philips SPC 200 NC
|
||||
zc3xx 0471:0326 Philips SPC 300 NC
|
||||
sonixj 0471:0327 Philips SPC 600 NC
|
||||
sonixj 0471:0328 Philips SPC 700 NC
|
||||
zc3xx 0471:032d Philips SPC 210 NC
|
||||
zc3xx 0471:032e Philips SPC 315 NC
|
||||
sonixj 0471:0330 Philips SPC 710 NC
|
||||
se401 047d:5001 Kensington67014
|
||||
se401 047d:5002 Kensington6701(5/7)
|
||||
se401 047d:5003 Kensington67016
|
||||
spca501 0497:c001 Smile International
|
||||
sunplus 04a5:3003 Benq DC 1300
|
||||
sunplus 04a5:3008 Benq DC 1500
|
||||
sunplus 04a5:300a Benq DC 3410
|
||||
spca500 04a5:300c Benq DC 1016
|
||||
benq 04a5:3035 Benq DC E300
|
||||
vicam 04c1:009d HomeConnect Webcam [vicam]
|
||||
konica 04c8:0720 IntelYC 76
|
||||
finepix 04cb:0104 Fujifilm FinePix 4800
|
||||
finepix 04cb:0109 Fujifilm FinePix A202
|
||||
finepix 04cb:010b Fujifilm FinePix A203
|
||||
finepix 04cb:010f Fujifilm FinePix A204
|
||||
finepix 04cb:0111 Fujifilm FinePix A205
|
||||
finepix 04cb:0113 Fujifilm FinePix A210
|
||||
finepix 04cb:0115 Fujifilm FinePix A303
|
||||
finepix 04cb:0117 Fujifilm FinePix A310
|
||||
finepix 04cb:0119 Fujifilm FinePix F401
|
||||
finepix 04cb:011b Fujifilm FinePix F402
|
||||
finepix 04cb:011d Fujifilm FinePix F410
|
||||
finepix 04cb:0121 Fujifilm FinePix F601
|
||||
finepix 04cb:0123 Fujifilm FinePix F700
|
||||
finepix 04cb:0125 Fujifilm FinePix M603
|
||||
finepix 04cb:0127 Fujifilm FinePix S300
|
||||
finepix 04cb:0129 Fujifilm FinePix S304
|
||||
finepix 04cb:012b Fujifilm FinePix S500
|
||||
finepix 04cb:012d Fujifilm FinePix S602
|
||||
finepix 04cb:012f Fujifilm FinePix S700
|
||||
finepix 04cb:0131 Fujifilm FinePix unknown model
|
||||
finepix 04cb:013b Fujifilm FinePix unknown model
|
||||
finepix 04cb:013d Fujifilm FinePix unknown model
|
||||
finepix 04cb:013f Fujifilm FinePix F420
|
||||
sunplus 04f1:1001 JVC GC A50
|
||||
spca561 04fc:0561 Flexcam 100
|
||||
spca1528 04fc:1528 Sunplus MD80 clone
|
||||
sunplus 04fc:500c Sunplus CA500C
|
||||
sunplus 04fc:504a Aiptek Mini PenCam 1.3
|
||||
sunplus 04fc:504b Maxell MaxPocket LE 1.3
|
||||
sunplus 04fc:5330 Digitrex 2110
|
||||
sunplus 04fc:5360 Sunplus Generic
|
||||
spca500 04fc:7333 PalmPixDC85
|
||||
sunplus 04fc:ffff Pure DigitalDakota
|
||||
nw80x 0502:d001 DVC V6
|
||||
spca501 0506:00df 3Com HomeConnect Lite
|
||||
sunplus 052b:1507 Megapixel 5 Pretec DC-1007
|
||||
sunplus 052b:1513 Megapix V4
|
||||
sunplus 052b:1803 MegaImage VI
|
||||
nw80x 052b:d001 EZCam Pro p35u
|
||||
tv8532 0545:808b Veo Stingray
|
||||
tv8532 0545:8333 Veo Stingray
|
||||
sunplus 0546:3155 Polaroid PDC3070
|
||||
sunplus 0546:3191 Polaroid Ion 80
|
||||
sunplus 0546:3273 Polaroid PDC2030
|
||||
touptek 0547:6801 TTUCMOS08000KPB, AS MU800
|
||||
dtcs033 0547:7303 Anchor Chips, Inc
|
||||
ov519 054c:0154 Sonny toy4
|
||||
ov519 054c:0155 Sonny toy5
|
||||
cpia1 0553:0002 CPIA CPiA (version1) based cameras
|
||||
stv0680 0553:0202 STV0680 Camera
|
||||
zc3xx 055f:c005 Mustek Wcam300A
|
||||
spca500 055f:c200 Mustek Gsmart 300
|
||||
sunplus 055f:c211 Kowa Bs888e Microcamera
|
||||
spca500 055f:c220 Gsmart Mini
|
||||
sunplus 055f:c230 Mustek Digicam 330K
|
||||
sunplus 055f:c232 Mustek MDC3500
|
||||
sunplus 055f:c360 Mustek DV4000 Mpeg4
|
||||
sunplus 055f:c420 Mustek gSmart Mini 2
|
||||
sunplus 055f:c430 Mustek Gsmart LCD 2
|
||||
sunplus 055f:c440 Mustek DV 3000
|
||||
sunplus 055f:c520 Mustek gSmart Mini 3
|
||||
sunplus 055f:c530 Mustek Gsmart LCD 3
|
||||
sunplus 055f:c540 Gsmart D30
|
||||
sunplus 055f:c630 Mustek MDC4000
|
||||
sunplus 055f:c650 Mustek MDC5500Z
|
||||
nw80x 055f:d001 Mustek Wcam 300 mini
|
||||
zc3xx 055f:d003 Mustek WCam300A
|
||||
zc3xx 055f:d004 Mustek WCam300 AN
|
||||
conex 0572:0041 Creative Notebook cx11646
|
||||
ov519 05a9:0511 Video Blaster WebCam 3/WebCam Plus, D-Link USB Digital Video Camera
|
||||
ov519 05a9:0518 Creative WebCam
|
||||
ov519 05a9:0519 OV519 Microphone
|
||||
ov519 05a9:0530 OmniVision
|
||||
ov534_9 05a9:1550 OmniVision VEHO Filmscanner
|
||||
ov519 05a9:2800 OmniVision SuperCAM
|
||||
ov519 05a9:4519 Webcam Classic
|
||||
ov534_9 05a9:8065 OmniVision test kit ov538+ov9712
|
||||
ov519 05a9:8519 OmniVision
|
||||
ov519 05a9:a511 D-Link USB Digital Video Camera
|
||||
ov519 05a9:a518 D-Link DSB-C310 Webcam
|
||||
sunplus 05da:1018 Digital Dream Enigma 1.3
|
||||
stk014 05e1:0893 Syntek DV4000
|
||||
gl860 05e3:0503 Genesys Logic PC Camera
|
||||
gl860 05e3:f191 Genesys Logic PC Camera
|
||||
vicam 0602:1001 ViCam Webcam
|
||||
spca561 060b:a001 Maxell Compact Pc PM3
|
||||
zc3xx 0698:2003 CTX M730V built in
|
||||
topro 06a2:0003 TP6800 PC Camera, CmoX CX0342 webcam
|
||||
topro 06a2:6810 Creative Qmax
|
||||
nw80x 06a5:0000 Typhoon Webcam 100 USB
|
||||
nw80x 06a5:d001 Divio based webcams
|
||||
nw80x 06a5:d800 Divio Chicony TwinkleCam, Trust SpaceCam
|
||||
spca500 06bd:0404 Agfa CL20
|
||||
spca500 06be:0800 Optimedia
|
||||
nw80x 06be:d001 EZCam Pro p35u
|
||||
sunplus 06d6:0031 Trust 610 LCD PowerC@m Zoom
|
||||
sunplus 06d6:0041 Aashima Technology B.V.
|
||||
spca506 06e1:a190 ADS Instant VCD
|
||||
ov534 06f8:3002 Hercules Blog Webcam
|
||||
ov534_9 06f8:3003 Hercules Dualpix HD Weblog
|
||||
sonixj 06f8:3004 Hercules Classic Silver
|
||||
sonixj 06f8:3008 Hercules Deluxe Optical Glass
|
||||
pac7302 06f8:3009 Hercules Classic Link
|
||||
pac7302 06f8:301b Hercules Link
|
||||
nw80x 0728:d001 AVerMedia Camguard
|
||||
spca508 0733:0110 ViewQuest VQ110
|
||||
spca501 0733:0401 Intel Create and Share
|
||||
spca501 0733:0402 ViewQuest M318B
|
||||
spca505 0733:0430 Intel PC Camera Pro
|
||||
sunplus 0733:1311 Digital Dream Epsilon 1.3
|
||||
sunplus 0733:1314 Mercury 2.1MEG Deluxe Classic Cam
|
||||
sunplus 0733:2211 Jenoptik jdc 21 LCD
|
||||
sunplus 0733:2221 Mercury Digital Pro 3.1p
|
||||
sunplus 0733:3261 Concord 3045 spca536a
|
||||
sunplus 0733:3281 Cyberpix S550V
|
||||
spca506 0734:043b 3DeMon USB Capture aka
|
||||
cpia1 0813:0001 QX3 camera
|
||||
ov519 0813:0002 Dual Mode USB Camera Plus
|
||||
spca500 084d:0003 D-Link DSC-350
|
||||
spca500 08ca:0103 Aiptek PocketDV
|
||||
sunplus 08ca:0104 Aiptek PocketDVII 1.3
|
||||
sunplus 08ca:0106 Aiptek Pocket DV3100+
|
||||
mr97310a 08ca:0110 Trust Spyc@m 100
|
||||
mr97310a 08ca:0111 Aiptek PenCam VGA+
|
||||
sunplus 08ca:2008 Aiptek Mini PenCam 2 M
|
||||
sunplus 08ca:2010 Aiptek PocketCam 3M
|
||||
sunplus 08ca:2016 Aiptek PocketCam 2 Mega
|
||||
sunplus 08ca:2018 Aiptek Pencam SD 2M
|
||||
sunplus 08ca:2020 Aiptek Slim 3000F
|
||||
sunplus 08ca:2022 Aiptek Slim 3200
|
||||
sunplus 08ca:2024 Aiptek DV3500 Mpeg4
|
||||
sunplus 08ca:2028 Aiptek PocketCam4M
|
||||
sunplus 08ca:2040 Aiptek PocketDV4100M
|
||||
sunplus 08ca:2042 Aiptek PocketDV5100
|
||||
sunplus 08ca:2050 Medion MD 41437
|
||||
sunplus 08ca:2060 Aiptek PocketDV5300
|
||||
tv8532 0923:010f ICM532 cams
|
||||
mr97310a 093a:010e All known CIF cams with this ID
|
||||
mr97310a 093a:010f All known VGA cams with this ID
|
||||
mars 093a:050f Mars-Semi Pc-Camera
|
||||
pac207 093a:2460 Qtec Webcam 100
|
||||
pac207 093a:2461 HP Webcam
|
||||
pac207 093a:2463 Philips SPC 220 NC
|
||||
pac207 093a:2464 Labtec Webcam 1200
|
||||
pac207 093a:2468 Webcam WB-1400T
|
||||
pac207 093a:2470 Genius GF112
|
||||
pac207 093a:2471 Genius VideoCam ge111
|
||||
pac207 093a:2472 Genius VideoCam ge110
|
||||
pac207 093a:2474 Genius iLook 111
|
||||
pac207 093a:2476 Genius e-Messenger 112
|
||||
pac7311 093a:2600 PAC7311 Typhoon
|
||||
pac7311 093a:2601 Philips SPC 610 NC
|
||||
pac7311 093a:2603 Philips SPC 500 NC
|
||||
pac7311 093a:2608 Trust WB-3300p
|
||||
pac7311 093a:260e Gigaware VGA PC Camera, Trust WB-3350p, SIGMA cam 2350
|
||||
pac7311 093a:260f SnakeCam
|
||||
pac7302 093a:2620 Apollo AC-905
|
||||
pac7302 093a:2621 PAC731x
|
||||
pac7302 093a:2622 Genius Eye 312
|
||||
pac7302 093a:2623 Pixart Imaging, Inc.
|
||||
pac7302 093a:2624 PAC7302
|
||||
pac7302 093a:2625 Genius iSlim 310
|
||||
pac7302 093a:2626 Labtec 2200
|
||||
pac7302 093a:2627 Genius FaceCam 300
|
||||
pac7302 093a:2628 Genius iLook 300
|
||||
pac7302 093a:2629 Genious iSlim 300
|
||||
pac7302 093a:262a Webcam 300k
|
||||
pac7302 093a:262c Philips SPC 230 NC
|
||||
jl2005bcd 0979:0227 Various brands, 19 known cameras supported
|
||||
jeilinj 0979:0270 Sakar 57379
|
||||
jeilinj 0979:0280 Sportscam DV15, Sakar 57379
|
||||
zc3xx 0ac8:0301 Web Camera
|
||||
zc3xx 0ac8:0302 Z-star Vimicro zc0302
|
||||
vc032x 0ac8:0321 Vimicro generic vc0321
|
||||
vc032x 0ac8:0323 Vimicro Vc0323
|
||||
vc032x 0ac8:0328 A4Tech PK-130MG
|
||||
zc3xx 0ac8:301b Z-Star zc301b
|
||||
zc3xx 0ac8:303b Vimicro 0x303b
|
||||
zc3xx 0ac8:305b Z-star Vimicro zc0305b
|
||||
zc3xx 0ac8:307b PC Camera (ZS0211)
|
||||
vc032x 0ac8:c001 Sony embedded vimicro
|
||||
vc032x 0ac8:c002 Sony embedded vimicro
|
||||
vc032x 0ac8:c301 Samsung Q1 Ultra Premium
|
||||
spca508 0af9:0010 Hama USB Sightcam 100
|
||||
spca508 0af9:0011 Hama USB Sightcam 100
|
||||
ov519 0b62:0059 iBOT2 Webcam
|
||||
sonixb 0c45:6001 Genius VideoCAM NB
|
||||
sonixb 0c45:6005 Microdia Sweex Mini Webcam
|
||||
sonixb 0c45:6007 Sonix sn9c101 + Tas5110D
|
||||
sonixb 0c45:6009 spcaCam@120
|
||||
sonixb 0c45:600d spcaCam@120
|
||||
sonixb 0c45:6011 Microdia PC Camera (SN9C102)
|
||||
sonixb 0c45:6019 Generic Sonix OV7630
|
||||
sonixb 0c45:6024 Generic Sonix Tas5130c
|
||||
sonixb 0c45:6025 Xcam Shanga
|
||||
sonixb 0c45:6027 GeniusEye 310
|
||||
sonixb 0c45:6028 Sonix Btc Pc380
|
||||
sonixb 0c45:6029 spcaCam@150
|
||||
sonixb 0c45:602a Meade ETX-105EC Camera
|
||||
sonixb 0c45:602c Generic Sonix OV7630
|
||||
sonixb 0c45:602d LIC-200 LG
|
||||
sonixb 0c45:602e Genius VideoCam Messenger
|
||||
sonixj 0c45:6040 Speed NVC 350K
|
||||
sonixj 0c45:607c Sonix sn9c102p Hv7131R
|
||||
sonixb 0c45:6083 VideoCAM Look
|
||||
sonixb 0c45:608c VideoCAM Look
|
||||
sonixb 0c45:608f PC Camera (SN9C103 + OV7630)
|
||||
sonixb 0c45:60a8 VideoCAM Look
|
||||
sonixb 0c45:60aa VideoCAM Look
|
||||
sonixb 0c45:60af VideoCAM Look
|
||||
sonixb 0c45:60b0 Genius VideoCam Look
|
||||
sonixj 0c45:60c0 Sangha Sn535
|
||||
sonixj 0c45:60ce USB-PC-Camera-168 (TALK-5067)
|
||||
sonixj 0c45:60ec SN9C105+MO4000
|
||||
sonixj 0c45:60fb Surfer NoName
|
||||
sonixj 0c45:60fc LG-LIC300
|
||||
sonixj 0c45:60fe Microdia Audio
|
||||
sonixj 0c45:6100 PC Camera (SN9C128)
|
||||
sonixj 0c45:6102 PC Camera (SN9C128)
|
||||
sonixj 0c45:610a PC Camera (SN9C128)
|
||||
sonixj 0c45:610b PC Camera (SN9C128)
|
||||
sonixj 0c45:610c PC Camera (SN9C128)
|
||||
sonixj 0c45:610e PC Camera (SN9C128)
|
||||
sonixj 0c45:6128 Microdia/Sonix SNP325
|
||||
sonixj 0c45:612a Avant Camera
|
||||
sonixj 0c45:612b Speed-Link REFLECT2
|
||||
sonixj 0c45:612c Typhoon Rasy Cam 1.3MPix
|
||||
sonixj 0c45:612e PC Camera (SN9C110)
|
||||
sonixj 0c45:6130 Sonix Pccam
|
||||
sonixj 0c45:6138 Sn9c120 Mo4000
|
||||
sonixj 0c45:613a Microdia Sonix PC Camera
|
||||
sonixj 0c45:613b Surfer SN-206
|
||||
sonixj 0c45:613c Sonix Pccam168
|
||||
sonixj 0c45:613e PC Camera (SN9C120)
|
||||
sonixj 0c45:6142 Hama PC-Webcam AC-150
|
||||
sonixj 0c45:6143 Sonix Pccam168
|
||||
sonixj 0c45:6148 Digitus DA-70811/ZSMC USB PC Camera ZS211/Microdia
|
||||
sonixj 0c45:614a Frontech E-Ccam (JIL-2225)
|
||||
sn9c20x 0c45:6240 PC Camera (SN9C201 + MT9M001)
|
||||
sn9c20x 0c45:6242 PC Camera (SN9C201 + MT9M111)
|
||||
sn9c20x 0c45:6248 PC Camera (SN9C201 + OV9655)
|
||||
sn9c20x 0c45:624c PC Camera (SN9C201 + MT9M112)
|
||||
sn9c20x 0c45:624e PC Camera (SN9C201 + SOI968)
|
||||
sn9c20x 0c45:624f PC Camera (SN9C201 + OV9650)
|
||||
sn9c20x 0c45:6251 PC Camera (SN9C201 + OV9650)
|
||||
sn9c20x 0c45:6253 PC Camera (SN9C201 + OV9650)
|
||||
sn9c20x 0c45:6260 PC Camera (SN9C201 + OV7670)
|
||||
sn9c20x 0c45:6270 PC Camera (SN9C201 + MT9V011/MT9V111/MT9V112)
|
||||
sn9c20x 0c45:627b PC Camera (SN9C201 + OV7660)
|
||||
sn9c20x 0c45:627c PC Camera (SN9C201 + HV7131R)
|
||||
sn9c20x 0c45:627f PC Camera (SN9C201 + OV9650)
|
||||
sn9c20x 0c45:6280 PC Camera (SN9C202 + MT9M001)
|
||||
sn9c20x 0c45:6282 PC Camera (SN9C202 + MT9M111)
|
||||
sn9c20x 0c45:6288 PC Camera (SN9C202 + OV9655)
|
||||
sn9c20x 0c45:628c PC Camera (SN9C201 + MT9M112)
|
||||
sn9c20x 0c45:628e PC Camera (SN9C202 + SOI968)
|
||||
sn9c20x 0c45:628f PC Camera (SN9C202 + OV9650)
|
||||
sn9c20x 0c45:62a0 PC Camera (SN9C202 + OV7670)
|
||||
sn9c20x 0c45:62b0 PC Camera (SN9C202 + MT9V011/MT9V111/MT9V112)
|
||||
sn9c20x 0c45:62b3 PC Camera (SN9C202 + OV9655)
|
||||
sn9c20x 0c45:62bb PC Camera (SN9C202 + OV7660)
|
||||
sn9c20x 0c45:62bc PC Camera (SN9C202 + HV7131R)
|
||||
sn9c2028 0c45:8001 Wild Planet Digital Spy Camera
|
||||
sn9c2028 0c45:8003 Sakar #11199, #6637x, #67480 keychain cams
|
||||
sn9c2028 0c45:8008 Mini-Shotz ms-350
|
||||
sn9c2028 0c45:800a Vivitar Vivicam 3350B
|
||||
sunplus 0d64:0303 Sunplus FashionCam DXG
|
||||
ov519 0e96:c001 TRUST 380 USB2 SPACEC@M
|
||||
etoms 102c:6151 Qcam Sangha CIF
|
||||
etoms 102c:6251 Qcam xxxxxx VGA
|
||||
ov519 1046:9967 W9967CF/W9968CF WebCam IC, Video Blaster WebCam Go
|
||||
zc3xx 10fd:0128 Typhoon Webshot II USB 300k 0x0128
|
||||
spca561 10fd:7e50 FlyCam Usb 100
|
||||
zc3xx 10fd:804d Typhoon Webshot II Webcam [zc0301]
|
||||
zc3xx 10fd:8050 Typhoon Webshot II USB 300k
|
||||
ov534 1415:2000 Sony HD Eye for PS3 (SLEH 00201)
|
||||
pac207 145f:013a Trust WB-1300N
|
||||
pac7302 145f:013c Trust
|
||||
sn9c20x 145f:013d Trust WB-3600R
|
||||
vc032x 15b8:6001 HP 2.0 Megapixel
|
||||
vc032x 15b8:6002 HP 2.0 Megapixel rz406aa
|
||||
stk1135 174f:6a31 ASUSlaptop, MT9M112 sensor
|
||||
spca501 1776:501c Arowana 300K CMOS Camera
|
||||
t613 17a1:0128 TASCORP JPEG Webcam, NGS Cyclops
|
||||
vc032x 17ef:4802 Lenovo Vc0323+MI1310_SOC
|
||||
pac7302 1ae7:2001 SpeedLinkSnappy Mic SL-6825-SBK
|
||||
pac207 2001:f115 D-Link DSB-C120
|
||||
sq905c 2770:9050 Disney pix micro (CIF)
|
||||
sq905c 2770:9051 Lego Bionicle
|
||||
sq905c 2770:9052 Disney pix micro 2 (VGA)
|
||||
sq905c 2770:905c All 11 known cameras with this ID
|
||||
sq905 2770:9120 All 24 known cameras with this ID
|
||||
sq905c 2770:913d All 4 known cameras with this ID
|
||||
sq930x 2770:930b Sweex Motion Tracking / I-Tec iCam Tracer
|
||||
sq930x 2770:930c Trust WB-3500T / NSG Robbie 2.0
|
||||
spca500 2899:012c Toptro Industrial
|
||||
ov519 8020:ef04 ov519
|
||||
spca508 8086:0110 Intel Easy PC Camera
|
||||
spca500 8086:0630 Intel Pocket PC Camera
|
||||
spca506 99fa:8988 Grandtec V.cap
|
||||
sn9c20x a168:0610 Dino-Lite Digital Microscope (SN9C201 + HV7131R)
|
||||
sn9c20x a168:0611 Dino-Lite Digital Microscope (SN9C201 + HV7131R)
|
||||
sn9c20x a168:0613 Dino-Lite Digital Microscope (SN9C201 + HV7131R)
|
||||
sn9c20x a168:0614 Dino-Lite Digital Microscope (SN9C201 + MT9M111)
|
||||
sn9c20x a168:0615 Dino-Lite Digital Microscope (SN9C201 + MT9M111)
|
||||
sn9c20x a168:0617 Dino-Lite Digital Microscope (SN9C201 + MT9M111)
|
||||
sn9c20x a168:0618 Dino-Lite Digital Microscope (SN9C201 + HV7131R)
|
||||
spca561 abcd:cdee Petcam
|
||||
========= ========= ===================================================================
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
.. include:: <isonum.txt>
|
||||
|
||||
.. _v4l-drivers:
|
||||
|
||||
################################################
|
||||
Video4Linux (V4L) driver-specific documentation
|
||||
################################################
|
||||
|
@ -46,6 +48,7 @@ For more details see the file COPYING in the source distribution of Linux.
|
|||
pvrusb2
|
||||
pxa_camera
|
||||
radiotrack
|
||||
rcar-fdp1
|
||||
saa7134
|
||||
sh_mobile_ceu_camera
|
||||
si470x
|
||||
|
|
|
@ -1,29 +1,38 @@
|
|||
IVTV cards list
|
||||
===============
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
1 -> Hauppauge WinTV PVR-250
|
||||
2 -> Hauppauge WinTV PVR-350
|
||||
3 -> Hauppauge WinTV PVR-150 or PVR-500
|
||||
4 -> AVerMedia M179 [1461:a3ce,1461:a3cf]
|
||||
5 -> Yuan MPG600/Kuroutoshikou iTVC16-STVLP [12ab:fff3,12ab:ffff]
|
||||
6 -> Yuan MPG160/Kuroutoshikou iTVC15-STVLP [12ab:0000,10fc:40a0]
|
||||
7 -> Yuan PG600/DiamondMM PVR-550 [ff92:0070,ffab:0600]
|
||||
8 -> Adaptec AVC-2410 [9005:0093]
|
||||
9 -> Adaptec AVC-2010 [9005:0092]
|
||||
10 -> NAGASE TRANSGEAR 5000TV [1461:bfff]
|
||||
11 -> AOpen VA2000MAX-STN6 [0000:ff5f]
|
||||
12 -> YUAN MPG600GR/Kuroutoshikou CX23416GYC-STVLP [12ab:0600,fbab:0600,1154:0523]
|
||||
13 -> I/O Data GV-MVP/RX [10fc:d01e,10fc:d038,10fc:d039]
|
||||
14 -> I/O Data GV-MVP/RX2E [10fc:d025]
|
||||
15 -> GOTVIEW PCI DVD (partial support only) [12ab:0600]
|
||||
16 -> GOTVIEW PCI DVD2 Deluxe [ffac:0600]
|
||||
17 -> Yuan MPC622 [ff01:d998]
|
||||
18 -> Digital Cowboy DCT-MTVP1 [1461:bfff]
|
||||
19 -> Yuan PG600V2/GotView PCI DVD Lite [ffab:0600,ffad:0600]
|
||||
20 -> Club3D ZAP-TV1x01 [ffab:0600]
|
||||
21 -> AverTV MCE 116 Plus [1461:c439]
|
||||
22 -> ASUS Falcon2 [1043:4b66,1043:462e,1043:4b2e]
|
||||
23 -> AverMedia PVR-150 Plus [1461:c035]
|
||||
24 -> AverMedia EZMaker PCI Deluxe [1461:c03f]
|
||||
=========== ============================================================= ====================================================
|
||||
Card number Card name PCI IDs
|
||||
=========== ============================================================= ====================================================
|
||||
0 Hauppauge WinTV PVR-250 IVTV16 104d:813d
|
||||
1 Hauppauge WinTV PVR-350 IVTV16 104d:813d
|
||||
2 Hauppauge WinTV PVR-150 IVTV16 104d:813d
|
||||
3 AVerMedia M179 IVTV15 1461:a3cf, IVTV15 1461:a3ce
|
||||
4 Yuan MPG600, Kuroutoshikou ITVC16-STVLP IVTV16 12ab:fff3, IVTV16 12ab:ffff
|
||||
5 YUAN MPG160, Kuroutoshikou ITVC15-STVLP, I/O Data GV-M2TV/PCI IVTV15 10fc:40a0
|
||||
6 Yuan PG600, Diamond PVR-550 IVTV16 ff92:0070, IVTV16 ffab:0600
|
||||
7 Adaptec VideOh! AVC-2410 IVTV16 9005:0093
|
||||
8 Adaptec VideOh! AVC-2010 IVTV16 9005:0092
|
||||
9 Nagase Transgear 5000TV IVTV16 1461:bfff
|
||||
10 AOpen VA2000MAX-SNT6 IVTV16 0000:ff5f
|
||||
11 Yuan MPG600GR, Kuroutoshikou CX23416GYC-STVLP IVTV16 12ab:0600, IVTV16 fbab:0600, IVTV16 1154:0523
|
||||
12 I/O Data GV-MVP/RX, GV-MVP/RX2W (dual tuner) IVTV16 10fc:d01e, IVTV16 10fc:d038, IVTV16 10fc:d039
|
||||
13 I/O Data GV-MVP/RX2E IVTV16 10fc:d025
|
||||
14 GotView PCI DVD IVTV16 12ab:0600
|
||||
15 GotView PCI DVD2 Deluxe IVTV16 ffac:0600
|
||||
16 Yuan MPC622 IVTV16 ff01:d998
|
||||
17 Digital Cowboy DCT-MTVP1 IVTV16 1461:bfff
|
||||
18 Yuan PG600-2, GotView PCI DVD Lite IVTV16 ffab:0600, IVTV16 ffad:0600
|
||||
19 Club3D ZAP-TV1x01 IVTV16 ffab:0600
|
||||
20 AVerTV MCE 116 Plus IVTV16 1461:c439
|
||||
21 ASUS Falcon2 IVTV16 1043:4b66, IVTV16 1043:462e, IVTV16 1043:4b2e
|
||||
22 AVerMedia PVR-150 Plus / AVerTV M113 Partsnic (Daewoo) Tuner IVTV16 1461:c034, IVTV16 1461:c035
|
||||
23 AVerMedia EZMaker PCI Deluxe IVTV16 1461:c03f
|
||||
24 AVerMedia M104 IVTV16 1461:c136
|
||||
25 Buffalo PC-MV5L/PCI IVTV16 1154:052b
|
||||
26 AVerMedia UltraTV 1500 MCE / AVerTV M113 Philips Tuner IVTV16 1461:c019, IVTV16 1461:c01b
|
||||
27 Sony VAIO Giga Pocket (ENX Kikyou) IVTV16 104d:813d
|
||||
28 Hauppauge WinTV PVR-350 (V1) IVTV16 104d:813d
|
||||
29 Yuan MPG600GR, Kuroutoshikou CX23416GYC-STVLP (no GR) IVTV16 104d:813d
|
||||
30 Yuan MPG600GR, Kuroutoshikou CX23416GYC-STVLP (no GR/YCS) IVTV16 104d:813d
|
||||
=========== ============================================================= ====================================================
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
Renesas R-Car Fine Display Processor (FDP1) Driver
|
||||
==================================================
|
||||
|
||||
The R-Car FDP1 driver implements driver-specific controls as follows.
|
||||
|
||||
``V4L2_CID_DEINTERLACING_MODE (menu)``
|
||||
The video deinterlacing mode (such as Bob, Weave, ...). The R-Car FDP1
|
||||
driver implements the following modes.
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 1 4
|
||||
|
||||
* - ``"Progressive" (0)``
|
||||
- The input image video stream is progressive (not interlaced). No
|
||||
deinterlacing is performed. Apart from (optional) format and encoding
|
||||
conversion output frames are identical to the input frames.
|
||||
* - ``"Adaptive 2D/3D" (1)``
|
||||
- Motion adaptive version of 2D and 3D deinterlacing. Use 3D deinterlacing
|
||||
in the presence of fast motion and 2D deinterlacing with diagonal
|
||||
interpolation otherwise.
|
||||
* - ``"Fixed 2D" (2)``
|
||||
- The current field is scaled vertically by averaging adjacent lines to
|
||||
recover missing lines. This method is also known as blending or Line
|
||||
Averaging (LAV).
|
||||
* - ``"Fixed 3D" (3)``
|
||||
- The previous and next fields are averaged to recover lines missing from
|
||||
the current field. This method is also known as Field Averaging (FAV).
|
||||
* - ``"Previous field" (4)``
|
||||
- The current field is weaved with the previous field, i.e. the previous
|
||||
field is used to fill missing lines from the current field. This method
|
||||
is also known as weave deinterlacing.
|
||||
* - ``"Next field" (5)``
|
||||
- The current field is weaved with the next field, i.e. the next field is
|
||||
used to fill missing lines from the current field. This method is also
|
||||
known as weave deinterlacing.
|
|
@ -1,202 +1,204 @@
|
|||
SAA7134 cards list
|
||||
==================
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
0 -> UNKNOWN/GENERIC
|
||||
1 -> Proteus Pro [philips reference design] [1131:2001,1131:2001]
|
||||
2 -> LifeView FlyVIDEO3000 [5168:0138,4e42:0138]
|
||||
3 -> LifeView/Typhoon FlyVIDEO2000 [5168:0138,4e42:0138]
|
||||
4 -> EMPRESS [1131:6752]
|
||||
5 -> SKNet Monster TV [1131:4e85]
|
||||
6 -> Tevion MD 9717
|
||||
7 -> KNC One TV-Station RDS / Typhoon TV Tuner RDS [1131:fe01,1894:fe01]
|
||||
8 -> Terratec Cinergy 400 TV [153b:1142]
|
||||
9 -> Medion 5044
|
||||
10 -> Kworld/KuroutoShikou SAA7130-TVPCI
|
||||
11 -> Terratec Cinergy 600 TV [153b:1143]
|
||||
12 -> Medion 7134 [16be:0003,16be:5000]
|
||||
13 -> Typhoon TV+Radio 90031
|
||||
14 -> ELSA EX-VISION 300TV [1048:226b]
|
||||
15 -> ELSA EX-VISION 500TV [1048:226a]
|
||||
16 -> ASUS TV-FM 7134 [1043:4842,1043:4830,1043:4840]
|
||||
17 -> AOPEN VA1000 POWER [1131:7133]
|
||||
18 -> BMK MPEX No Tuner
|
||||
19 -> Compro VideoMate TV [185b:c100]
|
||||
20 -> Matrox CronosPlus [102B:48d0]
|
||||
21 -> 10MOONS PCI TV CAPTURE CARD [1131:2001]
|
||||
22 -> AverMedia M156 / Medion 2819 [1461:a70b]
|
||||
23 -> BMK MPEX Tuner
|
||||
24 -> KNC One TV-Station DVR [1894:a006]
|
||||
25 -> ASUS TV-FM 7133 [1043:4843]
|
||||
26 -> Pinnacle PCTV Stereo (saa7134) [11bd:002b]
|
||||
27 -> Manli MuchTV M-TV002
|
||||
28 -> Manli MuchTV M-TV001
|
||||
29 -> Nagase Sangyo TransGear 3000TV [1461:050c]
|
||||
30 -> Elitegroup ECS TVP3XP FM1216 Tuner Card(PAL-BG,FM) [1019:4cb4]
|
||||
31 -> Elitegroup ECS TVP3XP FM1236 Tuner Card (NTSC,FM) [1019:4cb5]
|
||||
32 -> AVACS SmartTV
|
||||
33 -> AVerMedia DVD EZMaker [1461:10ff]
|
||||
34 -> Noval Prime TV 7133
|
||||
35 -> AverMedia AverTV Studio 305 [1461:2115]
|
||||
36 -> UPMOST PURPLE TV [12ab:0800]
|
||||
37 -> Items MuchTV Plus / IT-005
|
||||
38 -> Terratec Cinergy 200 TV [153b:1152]
|
||||
39 -> LifeView FlyTV Platinum Mini [5168:0212,4e42:0212,5169:1502]
|
||||
40 -> Compro VideoMate TV PVR/FM [185b:c100]
|
||||
41 -> Compro VideoMate TV Gold+ [185b:c100]
|
||||
42 -> Sabrent SBT-TVFM (saa7130)
|
||||
43 -> :Zolid Xpert TV7134
|
||||
44 -> Empire PCI TV-Radio LE
|
||||
45 -> Avermedia AVerTV Studio 307 [1461:9715]
|
||||
46 -> AVerMedia Cardbus TV/Radio (E500) [1461:d6ee]
|
||||
47 -> Terratec Cinergy 400 mobile [153b:1162]
|
||||
48 -> Terratec Cinergy 600 TV MK3 [153b:1158]
|
||||
49 -> Compro VideoMate Gold+ Pal [185b:c200]
|
||||
50 -> Pinnacle PCTV 300i DVB-T + PAL [11bd:002d]
|
||||
51 -> ProVideo PV952 [1540:9524]
|
||||
52 -> AverMedia AverTV/305 [1461:2108]
|
||||
53 -> ASUS TV-FM 7135 [1043:4845]
|
||||
54 -> LifeView FlyTV Platinum FM / Gold [5168:0214,5168:5214,1489:0214,5168:0304]
|
||||
55 -> LifeView FlyDVB-T DUO / MSI TV@nywhere Duo [5168:0306,4E42:0306]
|
||||
56 -> Avermedia AVerTV 307 [1461:a70a]
|
||||
57 -> Avermedia AVerTV GO 007 FM [1461:f31f]
|
||||
58 -> ADS Tech Instant TV (saa7135) [1421:0350,1421:0351,1421:0370,1421:1370]
|
||||
59 -> Kworld/Tevion V-Stream Xpert TV PVR7134
|
||||
60 -> LifeView/Typhoon/Genius FlyDVB-T Duo Cardbus [5168:0502,4e42:0502,1489:0502]
|
||||
61 -> Philips TOUGH DVB-T reference design [1131:2004]
|
||||
62 -> Compro VideoMate TV Gold+II
|
||||
63 -> Kworld Xpert TV PVR7134
|
||||
64 -> FlyTV mini Asus Digimatrix [1043:0210]
|
||||
65 -> V-Stream Studio TV Terminator
|
||||
66 -> Yuan TUN-900 (saa7135)
|
||||
67 -> Beholder BeholdTV 409 FM [0000:4091]
|
||||
68 -> GoTView 7135 PCI [5456:7135]
|
||||
69 -> Philips EUROPA V3 reference design [1131:2004]
|
||||
70 -> Compro Videomate DVB-T300 [185b:c900]
|
||||
71 -> Compro Videomate DVB-T200 [185b:c901]
|
||||
72 -> RTD Embedded Technologies VFG7350 [1435:7350]
|
||||
73 -> RTD Embedded Technologies VFG7330 [1435:7330]
|
||||
74 -> LifeView FlyTV Platinum Mini2 [14c0:1212]
|
||||
75 -> AVerMedia AVerTVHD MCE A180 [1461:1044]
|
||||
76 -> SKNet MonsterTV Mobile [1131:4ee9]
|
||||
77 -> Pinnacle PCTV 40i/50i/110i (saa7133) [11bd:002e]
|
||||
78 -> ASUSTeK P7131 Dual [1043:4862]
|
||||
79 -> Sedna/MuchTV PC TV Cardbus TV/Radio (ITO25 Rev:2B)
|
||||
80 -> ASUS Digimatrix TV [1043:0210]
|
||||
81 -> Philips Tiger reference design [1131:2018]
|
||||
82 -> MSI TV@Anywhere plus [1462:6231,1462:8624]
|
||||
83 -> Terratec Cinergy 250 PCI TV [153b:1160]
|
||||
84 -> LifeView FlyDVB Trio [5168:0319]
|
||||
85 -> AverTV DVB-T 777 [1461:2c05,1461:2c05]
|
||||
86 -> LifeView FlyDVB-T / Genius VideoWonder DVB-T [5168:0301,1489:0301]
|
||||
87 -> ADS Instant TV Duo Cardbus PTV331 [0331:1421]
|
||||
88 -> Tevion/KWorld DVB-T 220RF [17de:7201]
|
||||
89 -> ELSA EX-VISION 700TV [1048:226c]
|
||||
90 -> Kworld ATSC110/115 [17de:7350,17de:7352]
|
||||
91 -> AVerMedia A169 B [1461:7360]
|
||||
92 -> AVerMedia A169 B1 [1461:6360]
|
||||
93 -> Medion 7134 Bridge #2 [16be:0005]
|
||||
94 -> LifeView FlyDVB-T Hybrid Cardbus/MSI TV @nywhere A/D NB [5168:3306,5168:3502,5168:3307,4e42:3502]
|
||||
95 -> LifeView FlyVIDEO3000 (NTSC) [5169:0138]
|
||||
96 -> Medion Md8800 Quadro [16be:0007,16be:0008,16be:000d]
|
||||
97 -> LifeView FlyDVB-S /Acorp TV134DS [5168:0300,4e42:0300]
|
||||
98 -> Proteus Pro 2309 [0919:2003]
|
||||
99 -> AVerMedia TV Hybrid A16AR [1461:2c00]
|
||||
100 -> Asus Europa2 OEM [1043:4860]
|
||||
101 -> Pinnacle PCTV 310i [11bd:002f]
|
||||
102 -> Avermedia AVerTV Studio 507 [1461:9715]
|
||||
103 -> Compro Videomate DVB-T200A
|
||||
104 -> Hauppauge WinTV-HVR1110 DVB-T/Hybrid [0070:6700,0070:6701,0070:6702,0070:6703,0070:6704,0070:6705]
|
||||
105 -> Terratec Cinergy HT PCMCIA [153b:1172]
|
||||
106 -> Encore ENLTV [1131:2342,1131:2341,3016:2344]
|
||||
107 -> Encore ENLTV-FM [1131:230f]
|
||||
108 -> Terratec Cinergy HT PCI [153b:1175]
|
||||
109 -> Philips Tiger - S Reference design
|
||||
110 -> Avermedia M102 [1461:f31e]
|
||||
111 -> ASUS P7131 4871 [1043:4871]
|
||||
112 -> ASUSTeK P7131 Hybrid [1043:4876]
|
||||
113 -> Elitegroup ECS TVP3XP FM1246 Tuner Card (PAL,FM) [1019:4cb6]
|
||||
114 -> KWorld DVB-T 210 [17de:7250]
|
||||
115 -> Sabrent PCMCIA TV-PCB05 [0919:2003]
|
||||
116 -> 10MOONS TM300 TV Card [1131:2304]
|
||||
117 -> Avermedia Super 007 [1461:f01d]
|
||||
118 -> Beholder BeholdTV 401 [0000:4016]
|
||||
119 -> Beholder BeholdTV 403 [0000:4036]
|
||||
120 -> Beholder BeholdTV 403 FM [0000:4037]
|
||||
121 -> Beholder BeholdTV 405 [0000:4050]
|
||||
122 -> Beholder BeholdTV 405 FM [0000:4051]
|
||||
123 -> Beholder BeholdTV 407 [0000:4070]
|
||||
124 -> Beholder BeholdTV 407 FM [0000:4071]
|
||||
125 -> Beholder BeholdTV 409 [0000:4090]
|
||||
126 -> Beholder BeholdTV 505 FM [5ace:5050]
|
||||
127 -> Beholder BeholdTV 507 FM / BeholdTV 509 FM [5ace:5070,5ace:5090]
|
||||
128 -> Beholder BeholdTV Columbus TV/FM [0000:5201]
|
||||
129 -> Beholder BeholdTV 607 FM [5ace:6070]
|
||||
130 -> Beholder BeholdTV M6 [5ace:6190]
|
||||
131 -> Twinhan Hybrid DTV-DVB 3056 PCI [1822:0022]
|
||||
132 -> Genius TVGO AM11MCE
|
||||
133 -> NXP Snake DVB-S reference design
|
||||
134 -> Medion/Creatix CTX953 Hybrid [16be:0010]
|
||||
135 -> MSI TV@nywhere A/D v1.1 [1462:8625]
|
||||
136 -> AVerMedia Cardbus TV/Radio (E506R) [1461:f436]
|
||||
137 -> AVerMedia Hybrid TV/Radio (A16D) [1461:f936]
|
||||
138 -> Avermedia M115 [1461:a836]
|
||||
139 -> Compro VideoMate T750 [185b:c900]
|
||||
140 -> Avermedia DVB-S Pro A700 [1461:a7a1]
|
||||
141 -> Avermedia DVB-S Hybrid+FM A700 [1461:a7a2]
|
||||
142 -> Beholder BeholdTV H6 [5ace:6290]
|
||||
143 -> Beholder BeholdTV M63 [5ace:6191]
|
||||
144 -> Beholder BeholdTV M6 Extra [5ace:6193]
|
||||
145 -> AVerMedia MiniPCI DVB-T Hybrid M103 [1461:f636,1461:f736]
|
||||
146 -> ASUSTeK P7131 Analog
|
||||
147 -> Asus Tiger 3in1 [1043:4878]
|
||||
148 -> Encore ENLTV-FM v5.3 [1a7f:2008]
|
||||
149 -> Avermedia PCI pure analog (M135A) [1461:f11d]
|
||||
150 -> Zogis Real Angel 220
|
||||
151 -> ADS Tech Instant HDTV [1421:0380]
|
||||
152 -> Asus Tiger Rev:1.00 [1043:4857]
|
||||
153 -> Kworld Plus TV Analog Lite PCI [17de:7128]
|
||||
154 -> Avermedia AVerTV GO 007 FM Plus [1461:f31d]
|
||||
155 -> Hauppauge WinTV-HVR1150 ATSC/QAM-Hybrid [0070:6706,0070:6708]
|
||||
156 -> Hauppauge WinTV-HVR1120 DVB-T/Hybrid [0070:6707,0070:6709,0070:670a]
|
||||
157 -> Avermedia AVerTV Studio 507UA [1461:a11b]
|
||||
158 -> AVerMedia Cardbus TV/Radio (E501R) [1461:b7e9]
|
||||
159 -> Beholder BeholdTV 505 RDS [0000:505B]
|
||||
160 -> Beholder BeholdTV 507 RDS [0000:5071]
|
||||
161 -> Beholder BeholdTV 507 RDS [0000:507B]
|
||||
162 -> Beholder BeholdTV 607 FM [5ace:6071]
|
||||
163 -> Beholder BeholdTV 609 FM [5ace:6090]
|
||||
164 -> Beholder BeholdTV 609 FM [5ace:6091]
|
||||
165 -> Beholder BeholdTV 607 RDS [5ace:6072]
|
||||
166 -> Beholder BeholdTV 607 RDS [5ace:6073]
|
||||
167 -> Beholder BeholdTV 609 RDS [5ace:6092]
|
||||
168 -> Beholder BeholdTV 609 RDS [5ace:6093]
|
||||
169 -> Compro VideoMate S350/S300 [185b:c900]
|
||||
170 -> AverMedia AverTV Studio 505 [1461:a115]
|
||||
171 -> Beholder BeholdTV X7 [5ace:7595]
|
||||
172 -> RoverMedia TV Link Pro FM [19d1:0138]
|
||||
173 -> Zolid Hybrid TV Tuner PCI [1131:2004]
|
||||
174 -> Asus Europa Hybrid OEM [1043:4847]
|
||||
175 -> Leadtek Winfast DTV1000S [107d:6655]
|
||||
176 -> Beholder BeholdTV 505 RDS [0000:5051]
|
||||
177 -> Hawell HW-404M7
|
||||
178 -> Beholder BeholdTV H7 [5ace:7190]
|
||||
179 -> Beholder BeholdTV A7 [5ace:7090]
|
||||
180 -> Avermedia PCI M733A [1461:4155,1461:4255]
|
||||
181 -> TechoTrend TT-budget T-3000 [13c2:2804]
|
||||
182 -> Kworld PCI SBTVD/ISDB-T Full-Seg Hybrid [17de:b136]
|
||||
183 -> Compro VideoMate Vista M1F [185b:c900]
|
||||
184 -> Encore ENLTV-FM 3 [1a7f:2108]
|
||||
185 -> MagicPro ProHDTV Pro2 DMB-TH/Hybrid [17de:d136]
|
||||
186 -> Beholder BeholdTV 501 [5ace:5010]
|
||||
187 -> Beholder BeholdTV 503 FM [5ace:5030]
|
||||
188 -> Sensoray 811/911 [6000:0811,6000:0911]
|
||||
189 -> Kworld PC150-U [17de:a134]
|
||||
190 -> Asus My Cinema PS3-100 [1043:48cd]
|
||||
191 -> Hawell HW-9004V1
|
||||
192 -> AverMedia AverTV Satellite Hybrid+FM A706 [1461:2055]
|
||||
193 -> WIS Voyager or compatible [1905:7007]
|
||||
194 -> AverMedia AverTV/505 [1461:a10a]
|
||||
195 -> Leadtek Winfast TV2100 FM [107d:6f3a]
|
||||
196 -> SnaZio* TVPVR PRO [1779:13cf]
|
||||
=========== ======================================================= ================================================================
|
||||
Card number Card name PCI IDs
|
||||
=========== ======================================================= ================================================================
|
||||
0 UNKNOWN/GENERIC
|
||||
1 Proteus Pro [philips reference design] 1131:2001, 1131:2001
|
||||
2 LifeView FlyVIDEO3000 5168:0138, 4e42:0138
|
||||
3 LifeView/Typhoon FlyVIDEO2000 5168:0138, 4e42:0138
|
||||
4 EMPRESS 1131:6752
|
||||
5 SKNet Monster TV 1131:4e85
|
||||
6 Tevion MD 9717
|
||||
7 KNC One TV-Station RDS / Typhoon TV Tuner RDS 1131:fe01, 1894:fe01
|
||||
8 Terratec Cinergy 400 TV 153b:1142
|
||||
9 Medion 5044
|
||||
10 Kworld/KuroutoShikou SAA7130-TVPCI
|
||||
11 Terratec Cinergy 600 TV 153b:1143
|
||||
12 Medion 7134 16be:0003, 16be:5000
|
||||
13 Typhoon TV+Radio 90031
|
||||
14 ELSA EX-VISION 300TV 1048:226b
|
||||
15 ELSA EX-VISION 500TV 1048:226a
|
||||
16 ASUS TV-FM 7134 1043:4842, 1043:4830, 1043:4840
|
||||
17 AOPEN VA1000 POWER 1131:7133
|
||||
18 BMK MPEX No Tuner
|
||||
19 Compro VideoMate TV 185b:c100
|
||||
20 Matrox CronosPlus 102B:48d0
|
||||
21 10MOONS PCI TV CAPTURE CARD 1131:2001
|
||||
22 AverMedia M156 / Medion 2819 1461:a70b
|
||||
23 BMK MPEX Tuner
|
||||
24 KNC One TV-Station DVR 1894:a006
|
||||
25 ASUS TV-FM 7133 1043:4843
|
||||
26 Pinnacle PCTV Stereo (saa7134) 11bd:002b
|
||||
27 Manli MuchTV M-TV002
|
||||
28 Manli MuchTV M-TV001
|
||||
29 Nagase Sangyo TransGear 3000TV 1461:050c
|
||||
30 Elitegroup ECS TVP3XP FM1216 Tuner Card(PAL-BG,FM) 1019:4cb4
|
||||
31 Elitegroup ECS TVP3XP FM1236 Tuner Card (NTSC,FM) 1019:4cb5
|
||||
32 AVACS SmartTV
|
||||
33 AVerMedia DVD EZMaker 1461:10ff
|
||||
34 Noval Prime TV 7133
|
||||
35 AverMedia AverTV Studio 305 1461:2115
|
||||
36 UPMOST PURPLE TV 12ab:0800
|
||||
37 Items MuchTV Plus / IT-005
|
||||
38 Terratec Cinergy 200 TV 153b:1152
|
||||
39 LifeView FlyTV Platinum Mini 5168:0212, 4e42:0212, 5169:1502
|
||||
40 Compro VideoMate TV PVR/FM 185b:c100
|
||||
41 Compro VideoMate TV Gold+ 185b:c100
|
||||
42 Sabrent SBT-TVFM (saa7130)
|
||||
43 :Zolid Xpert TV7134
|
||||
44 Empire PCI TV-Radio LE
|
||||
45 Avermedia AVerTV Studio 307 1461:9715
|
||||
46 AVerMedia Cardbus TV/Radio (E500) 1461:d6ee
|
||||
47 Terratec Cinergy 400 mobile 153b:1162
|
||||
48 Terratec Cinergy 600 TV MK3 153b:1158
|
||||
49 Compro VideoMate Gold+ Pal 185b:c200
|
||||
50 Pinnacle PCTV 300i DVB-T + PAL 11bd:002d
|
||||
51 ProVideo PV952 1540:9524
|
||||
52 AverMedia AverTV/305 1461:2108
|
||||
53 ASUS TV-FM 7135 1043:4845
|
||||
54 LifeView FlyTV Platinum FM / Gold 5168:0214, 5168:5214, 1489:0214, 5168:0304
|
||||
55 LifeView FlyDVB-T DUO / MSI TV@nywhere Duo 5168:0306, 4E42:0306
|
||||
56 Avermedia AVerTV 307 1461:a70a
|
||||
57 Avermedia AVerTV GO 007 FM 1461:f31f
|
||||
58 ADS Tech Instant TV (saa7135) 1421:0350, 1421:0351, 1421:0370, 1421:1370
|
||||
59 Kworld/Tevion V-Stream Xpert TV PVR7134
|
||||
60 LifeView/Typhoon/Genius FlyDVB-T Duo Cardbus 5168:0502, 4e42:0502, 1489:0502
|
||||
61 Philips TOUGH DVB-T reference design 1131:2004
|
||||
62 Compro VideoMate TV Gold+II
|
||||
63 Kworld Xpert TV PVR7134
|
||||
64 FlyTV mini Asus Digimatrix 1043:0210
|
||||
65 V-Stream Studio TV Terminator
|
||||
66 Yuan TUN-900 (saa7135)
|
||||
67 Beholder BeholdTV 409 FM 0000:4091
|
||||
68 GoTView 7135 PCI 5456:7135
|
||||
69 Philips EUROPA V3 reference design 1131:2004
|
||||
70 Compro Videomate DVB-T300 185b:c900
|
||||
71 Compro Videomate DVB-T200 185b:c901
|
||||
72 RTD Embedded Technologies VFG7350 1435:7350
|
||||
73 RTD Embedded Technologies VFG7330 1435:7330
|
||||
74 LifeView FlyTV Platinum Mini2 14c0:1212
|
||||
75 AVerMedia AVerTVHD MCE A180 1461:1044
|
||||
76 SKNet MonsterTV Mobile 1131:4ee9
|
||||
77 Pinnacle PCTV 40i/50i/110i (saa7133) 11bd:002e
|
||||
78 ASUSTeK P7131 Dual 1043:4862
|
||||
79 Sedna/MuchTV PC TV Cardbus TV/Radio (ITO25 Rev:2B)
|
||||
80 ASUS Digimatrix TV 1043:0210
|
||||
81 Philips Tiger reference design 1131:2018
|
||||
82 MSI TV@Anywhere plus 1462:6231, 1462:8624
|
||||
83 Terratec Cinergy 250 PCI TV 153b:1160
|
||||
84 LifeView FlyDVB Trio 5168:0319
|
||||
85 AverTV DVB-T 777 1461:2c05, 1461:2c05
|
||||
86 LifeView FlyDVB-T / Genius VideoWonder DVB-T 5168:0301, 1489:0301
|
||||
87 ADS Instant TV Duo Cardbus PTV331 0331:1421
|
||||
88 Tevion/KWorld DVB-T 220RF 17de:7201
|
||||
89 ELSA EX-VISION 700TV 1048:226c
|
||||
90 Kworld ATSC110/115 17de:7350, 17de:7352
|
||||
91 AVerMedia A169 B 1461:7360
|
||||
92 AVerMedia A169 B1 1461:6360
|
||||
93 Medion 7134 Bridge #2 16be:0005
|
||||
94 LifeView FlyDVB-T Hybrid Cardbus/MSI TV @nywhere A/D NB 5168:3306, 5168:3502, 5168:3307, 4e42:3502
|
||||
95 LifeView FlyVIDEO3000 (NTSC) 5169:0138
|
||||
96 Medion Md8800 Quadro 16be:0007, 16be:0008, 16be:000d
|
||||
97 LifeView FlyDVB-S /Acorp TV134DS 5168:0300, 4e42:0300
|
||||
98 Proteus Pro 2309 0919:2003
|
||||
99 AVerMedia TV Hybrid A16AR 1461:2c00
|
||||
100 Asus Europa2 OEM 1043:4860
|
||||
101 Pinnacle PCTV 310i 11bd:002f
|
||||
102 Avermedia AVerTV Studio 507 1461:9715
|
||||
103 Compro Videomate DVB-T200A
|
||||
104 Hauppauge WinTV-HVR1110 DVB-T/Hybrid 0070:6700, 0070:6701, 0070:6702, 0070:6703, 0070:6704, 0070:6705
|
||||
105 Terratec Cinergy HT PCMCIA 153b:1172
|
||||
106 Encore ENLTV 1131:2342, 1131:2341, 3016:2344
|
||||
107 Encore ENLTV-FM 1131:230f
|
||||
108 Terratec Cinergy HT PCI 153b:1175
|
||||
109 Philips Tiger - S Reference design
|
||||
110 Avermedia M102 1461:f31e
|
||||
111 ASUS P7131 4871 1043:4871
|
||||
112 ASUSTeK P7131 Hybrid 1043:4876
|
||||
113 Elitegroup ECS TVP3XP FM1246 Tuner Card (PAL,FM) 1019:4cb6
|
||||
114 KWorld DVB-T 210 17de:7250
|
||||
115 Sabrent PCMCIA TV-PCB05 0919:2003
|
||||
116 10MOONS TM300 TV Card 1131:2304
|
||||
117 Avermedia Super 007 1461:f01d
|
||||
118 Beholder BeholdTV 401 0000:4016
|
||||
119 Beholder BeholdTV 403 0000:4036
|
||||
120 Beholder BeholdTV 403 FM 0000:4037
|
||||
121 Beholder BeholdTV 405 0000:4050
|
||||
122 Beholder BeholdTV 405 FM 0000:4051
|
||||
123 Beholder BeholdTV 407 0000:4070
|
||||
124 Beholder BeholdTV 407 FM 0000:4071
|
||||
125 Beholder BeholdTV 409 0000:4090
|
||||
126 Beholder BeholdTV 505 FM 5ace:5050
|
||||
127 Beholder BeholdTV 507 FM / BeholdTV 509 FM 5ace:5070, 5ace:5090
|
||||
128 Beholder BeholdTV Columbus TV/FM 0000:5201
|
||||
129 Beholder BeholdTV 607 FM 5ace:6070
|
||||
130 Beholder BeholdTV M6 5ace:6190
|
||||
131 Twinhan Hybrid DTV-DVB 3056 PCI 1822:0022
|
||||
132 Genius TVGO AM11MCE
|
||||
133 NXP Snake DVB-S reference design
|
||||
134 Medion/Creatix CTX953 Hybrid 16be:0010
|
||||
135 MSI TV@nywhere A/D v1.1 1462:8625
|
||||
136 AVerMedia Cardbus TV/Radio (E506R) 1461:f436
|
||||
137 AVerMedia Hybrid TV/Radio (A16D) 1461:f936
|
||||
138 Avermedia M115 1461:a836
|
||||
139 Compro VideoMate T750 185b:c900
|
||||
140 Avermedia DVB-S Pro A700 1461:a7a1
|
||||
141 Avermedia DVB-S Hybrid+FM A700 1461:a7a2
|
||||
142 Beholder BeholdTV H6 5ace:6290
|
||||
143 Beholder BeholdTV M63 5ace:6191
|
||||
144 Beholder BeholdTV M6 Extra 5ace:6193
|
||||
145 AVerMedia MiniPCI DVB-T Hybrid M103 1461:f636, 1461:f736
|
||||
146 ASUSTeK P7131 Analog
|
||||
147 Asus Tiger 3in1 1043:4878
|
||||
148 Encore ENLTV-FM v5.3 1a7f:2008
|
||||
149 Avermedia PCI pure analog (M135A) 1461:f11d
|
||||
150 Zogis Real Angel 220
|
||||
151 ADS Tech Instant HDTV 1421:0380
|
||||
152 Asus Tiger Rev:1.00 1043:4857
|
||||
153 Kworld Plus TV Analog Lite PCI 17de:7128
|
||||
154 Avermedia AVerTV GO 007 FM Plus 1461:f31d
|
||||
155 Hauppauge WinTV-HVR1150 ATSC/QAM-Hybrid 0070:6706, 0070:6708
|
||||
156 Hauppauge WinTV-HVR1120 DVB-T/Hybrid 0070:6707, 0070:6709, 0070:670a
|
||||
157 Avermedia AVerTV Studio 507UA 1461:a11b
|
||||
158 AVerMedia Cardbus TV/Radio (E501R) 1461:b7e9
|
||||
159 Beholder BeholdTV 505 RDS 0000:505B
|
||||
160 Beholder BeholdTV 507 RDS 0000:5071
|
||||
161 Beholder BeholdTV 507 RDS 0000:507B
|
||||
162 Beholder BeholdTV 607 FM 5ace:6071
|
||||
163 Beholder BeholdTV 609 FM 5ace:6090
|
||||
164 Beholder BeholdTV 609 FM 5ace:6091
|
||||
165 Beholder BeholdTV 607 RDS 5ace:6072
|
||||
166 Beholder BeholdTV 607 RDS 5ace:6073
|
||||
167 Beholder BeholdTV 609 RDS 5ace:6092
|
||||
168 Beholder BeholdTV 609 RDS 5ace:6093
|
||||
169 Compro VideoMate S350/S300 185b:c900
|
||||
170 AverMedia AverTV Studio 505 1461:a115
|
||||
171 Beholder BeholdTV X7 5ace:7595
|
||||
172 RoverMedia TV Link Pro FM 19d1:0138
|
||||
173 Zolid Hybrid TV Tuner PCI 1131:2004
|
||||
174 Asus Europa Hybrid OEM 1043:4847
|
||||
175 Leadtek Winfast DTV1000S 107d:6655
|
||||
176 Beholder BeholdTV 505 RDS 0000:5051
|
||||
177 Hawell HW-404M7
|
||||
178 Beholder BeholdTV H7 5ace:7190
|
||||
179 Beholder BeholdTV A7 5ace:7090
|
||||
180 Avermedia PCI M733A 1461:4155, 1461:4255
|
||||
181 TechoTrend TT-budget T-3000 13c2:2804
|
||||
182 Kworld PCI SBTVD/ISDB-T Full-Seg Hybrid 17de:b136
|
||||
183 Compro VideoMate Vista M1F 185b:c900
|
||||
184 Encore ENLTV-FM 3 1a7f:2108
|
||||
185 MagicPro ProHDTV Pro2 DMB-TH/Hybrid 17de:d136
|
||||
186 Beholder BeholdTV 501 5ace:5010
|
||||
187 Beholder BeholdTV 503 FM 5ace:5030
|
||||
188 Sensoray 811/911 6000:0811, 6000:0911
|
||||
189 Kworld PC150-U 17de:a134
|
||||
190 Asus My Cinema PS3-100 1043:48cd
|
||||
191 Hawell HW-9004V1
|
||||
192 AverMedia AverTV Satellite Hybrid+FM A706 1461:2055
|
||||
193 WIS Voyager or compatible 1905:7007
|
||||
194 AverMedia AverTV/505 1461:a10a
|
||||
195 Leadtek Winfast TV2100 FM 107d:6f3a
|
||||
196 SnaZio* TVPVR PRO 1779:13cf
|
||||
=========== ======================================================= ================================================================
|
||||
|
|
|
@ -1,19 +1,21 @@
|
|||
SAA7134 cards list
|
||||
SAA7164 cards list
|
||||
==================
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
0 -> Unknown
|
||||
1 -> Generic Rev2
|
||||
2 -> Generic Rev3
|
||||
3 -> Hauppauge WinTV-HVR2250 [0070:8880,0070:8810]
|
||||
4 -> Hauppauge WinTV-HVR2200 [0070:8980]
|
||||
5 -> Hauppauge WinTV-HVR2200 [0070:8900]
|
||||
6 -> Hauppauge WinTV-HVR2200 [0070:8901]
|
||||
7 -> Hauppauge WinTV-HVR2250 [0070:8891,0070:8851]
|
||||
8 -> Hauppauge WinTV-HVR2250 [0070:88A1]
|
||||
9 -> Hauppauge WinTV-HVR2200 [0070:8940]
|
||||
10 -> Hauppauge WinTV-HVR2200 [0070:8953]
|
||||
11 -> Hauppauge WinTV-HVR2255(proto)
|
||||
12 -> Hauppauge WinTV-HVR2255 [0070:f111]
|
||||
13 -> Hauppauge WinTV-HVR2205 [0070:f123,0070:f120]
|
||||
=========== ==================================== ====================
|
||||
Card number Card name PCI IDs
|
||||
=========== ==================================== ====================
|
||||
0 Unknown
|
||||
1 Generic Rev2
|
||||
2 Generic Rev3
|
||||
3 Hauppauge WinTV-HVR2250 0070:8880, 0070:8810
|
||||
4 Hauppauge WinTV-HVR2200 0070:8980
|
||||
5 Hauppauge WinTV-HVR2200 0070:8900
|
||||
6 Hauppauge WinTV-HVR2200 0070:8901
|
||||
7 Hauppauge WinTV-HVR2250 0070:8891, 0070:8851
|
||||
8 Hauppauge WinTV-HVR2250 0070:88A1
|
||||
9 Hauppauge WinTV-HVR2200 0070:8940
|
||||
10 Hauppauge WinTV-HVR2200 0070:8953
|
||||
11 Hauppauge WinTV-HVR2255(proto) 0070:f111
|
||||
12 Hauppauge WinTV-HVR2255 0070:f111
|
||||
13 Hauppauge WinTV-HVR2205 0070:f123, 0070:f120
|
||||
=========== ==================================== ====================
|
||||
|
|
|
@ -1,21 +1,24 @@
|
|||
TM6000 cards list
|
||||
=================
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
1 -> Generic tm5600 board (tm5600) [6000:0001]
|
||||
2 -> Generic tm6000 board (tm6000) [6000:0001]
|
||||
3 -> Generic tm6010 board (tm6010) [6000:0002]
|
||||
4 -> 10Moons UT821 (tm5600) [6000:0001]
|
||||
5 -> 10Moons UT330 (tm5600)
|
||||
6 -> ADSTech Dual TV (tm6000) [06e1:f332]
|
||||
7 -> FreeCom and similar (tm6000) [14aa:0620]
|
||||
8 -> ADSTech Mini Dual TV (tm6000) [06e1:b339]
|
||||
9 -> Hauppauge WinTV HVR-900H/USB2 Stick (tm6010) [2040:6600,2040:6601,2040:6610,2040:6611]
|
||||
10 -> Beholder Wander (tm6010) [6000:dec0]
|
||||
11 -> Beholder Voyager (tm6010) [6000:dec1]
|
||||
12 -> TerraTec Cinergy Hybrid XE/Cinergy Hybrid Stick (tm6010) [0ccd:0086,0ccd:00a5]
|
||||
13 -> TwinHan TU501 (tm6010) [13d3:3240,13d3:3241,13d3:3243,13d3:3264]
|
||||
14 -> Beholder Wander Lite (tm6010) [6000:dec2]
|
||||
15 -> Beholder Voyager Lite (tm6010) [6000:dec3]
|
||||
|
||||
=========== ================================================= ==========================================
|
||||
Card number Card name USB IDs
|
||||
=========== ================================================= ==========================================
|
||||
0 Unknown tm6000 video grabber
|
||||
1 Generic tm5600 board 6000:0001
|
||||
2 Generic tm6000 board
|
||||
3 Generic tm6010 board 6000:0002
|
||||
4 10Moons UT 821
|
||||
5 10Moons UT 330
|
||||
6 ADSTECH Dual TV USB 06e1:f332
|
||||
7 Freecom Hybrid Stick / Moka DVB-T Receiver Dual 14aa:0620
|
||||
8 ADSTECH Mini Dual TV USB 06e1:b339
|
||||
9 Hauppauge WinTV HVR-900H / WinTV USB2-Stick 2040:6600, 2040:6601, 2040:6610, 2040:6611
|
||||
10 Beholder Wander DVB-T/TV/FM USB2.0 6000:dec0
|
||||
11 Beholder Voyager TV/FM USB2.0 6000:dec1
|
||||
12 Terratec Cinergy Hybrid XE / Cinergy Hybrid-Stick 0ccd:0086, 0ccd:00A5
|
||||
13 Twinhan TU501(704D1) 13d3:3240, 13d3:3241, 13d3:3243, 13d3:3264
|
||||
14 Beholder Wander Lite DVB-T/TV/FM USB2.0 6000:dec2
|
||||
15 Beholder Voyager Lite TV/FM USB2.0 6000:dec3
|
||||
16 Terratec Grabster AV 150/250 MX 0ccd:0079
|
||||
=========== ================================================= ==========================================
|
||||
|
|
|
@ -1,96 +1,98 @@
|
|||
Tuner cards list
|
||||
================
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
tuner=0 - Temic PAL (4002 FH5)
|
||||
tuner=1 - Philips PAL_I (FI1246 and compatibles)
|
||||
tuner=2 - Philips NTSC (FI1236,FM1236 and compatibles)
|
||||
tuner=3 - Philips (SECAM+PAL_BG) (FI1216MF, FM1216MF, FR1216MF)
|
||||
tuner=4 - NoTuner
|
||||
tuner=5 - Philips PAL_BG (FI1216 and compatibles)
|
||||
tuner=6 - Temic NTSC (4032 FY5)
|
||||
tuner=7 - Temic PAL_I (4062 FY5)
|
||||
tuner=8 - Temic NTSC (4036 FY5)
|
||||
tuner=9 - Alps HSBH1
|
||||
tuner=10 - Alps TSBE1
|
||||
tuner=11 - Alps TSBB5
|
||||
tuner=12 - Alps TSBE5
|
||||
tuner=13 - Alps TSBC5
|
||||
tuner=14 - Temic PAL_BG (4006FH5)
|
||||
tuner=15 - Alps TSCH6
|
||||
tuner=16 - Temic PAL_DK (4016 FY5)
|
||||
tuner=17 - Philips NTSC_M (MK2)
|
||||
tuner=18 - Temic PAL_I (4066 FY5)
|
||||
tuner=19 - Temic PAL* auto (4006 FN5)
|
||||
tuner=20 - Temic PAL_BG (4009 FR5) or PAL_I (4069 FR5)
|
||||
tuner=21 - Temic NTSC (4039 FR5)
|
||||
tuner=22 - Temic PAL/SECAM multi (4046 FM5)
|
||||
tuner=23 - Philips PAL_DK (FI1256 and compatibles)
|
||||
tuner=24 - Philips PAL/SECAM multi (FQ1216ME)
|
||||
tuner=25 - LG PAL_I+FM (TAPC-I001D)
|
||||
tuner=26 - LG PAL_I (TAPC-I701D)
|
||||
tuner=27 - LG NTSC+FM (TPI8NSR01F)
|
||||
tuner=28 - LG PAL_BG+FM (TPI8PSB01D)
|
||||
tuner=29 - LG PAL_BG (TPI8PSB11D)
|
||||
tuner=30 - Temic PAL* auto + FM (4009 FN5)
|
||||
tuner=31 - SHARP NTSC_JP (2U5JF5540)
|
||||
tuner=32 - Samsung PAL TCPM9091PD27
|
||||
tuner=33 - MT20xx universal
|
||||
tuner=34 - Temic PAL_BG (4106 FH5)
|
||||
tuner=35 - Temic PAL_DK/SECAM_L (4012 FY5)
|
||||
tuner=36 - Temic NTSC (4136 FY5)
|
||||
tuner=37 - LG PAL (newer TAPC series)
|
||||
tuner=38 - Philips PAL/SECAM multi (FM1216ME MK3)
|
||||
tuner=39 - LG NTSC (newer TAPC series)
|
||||
tuner=40 - HITACHI V7-J180AT
|
||||
tuner=41 - Philips PAL_MK (FI1216 MK)
|
||||
tuner=42 - Philips FCV1236D ATSC/NTSC dual in
|
||||
tuner=43 - Philips NTSC MK3 (FM1236MK3 or FM1236/F)
|
||||
tuner=44 - Philips 4 in 1 (ATI TV Wonder Pro/Conexant)
|
||||
tuner=45 - Microtune 4049 FM5
|
||||
tuner=46 - Panasonic VP27s/ENGE4324D
|
||||
tuner=47 - LG NTSC (TAPE series)
|
||||
tuner=48 - Tenna TNF 8831 BGFF)
|
||||
tuner=49 - Microtune 4042 FI5 ATSC/NTSC dual in
|
||||
tuner=50 - TCL 2002N
|
||||
tuner=51 - Philips PAL/SECAM_D (FM 1256 I-H3)
|
||||
tuner=52 - Thomson DTT 7610 (ATSC/NTSC)
|
||||
tuner=53 - Philips FQ1286
|
||||
tuner=54 - Philips/NXP TDA 8290/8295 + 8275/8275A/18271
|
||||
tuner=55 - TCL 2002MB
|
||||
tuner=56 - Philips PAL/SECAM multi (FQ1216AME MK4)
|
||||
tuner=57 - Philips FQ1236A MK4
|
||||
tuner=58 - Ymec TVision TVF-8531MF/8831MF/8731MF
|
||||
tuner=59 - Ymec TVision TVF-5533MF
|
||||
tuner=60 - Thomson DTT 761X (ATSC/NTSC)
|
||||
tuner=61 - Tena TNF9533-D/IF/TNF9533-B/DF
|
||||
tuner=62 - Philips TEA5767HN FM Radio
|
||||
tuner=63 - Philips FMD1216ME MK3 Hybrid Tuner
|
||||
tuner=64 - LG TDVS-H06xF
|
||||
tuner=65 - Ymec TVF66T5-B/DFF
|
||||
tuner=66 - LG TALN series
|
||||
tuner=67 - Philips TD1316 Hybrid Tuner
|
||||
tuner=68 - Philips TUV1236D ATSC/NTSC dual in
|
||||
tuner=69 - Tena TNF 5335 and similar models
|
||||
tuner=70 - Samsung TCPN 2121P30A
|
||||
tuner=71 - Xceive xc2028/xc3028 tuner
|
||||
tuner=72 - Thomson FE6600
|
||||
tuner=73 - Samsung TCPG 6121P30A
|
||||
tuner=75 - Philips TEA5761 FM Radio
|
||||
tuner=76 - Xceive 5000 tuner
|
||||
tuner=77 - TCL tuner MF02GIP-5N-E
|
||||
tuner=78 - Philips FMD1216MEX MK3 Hybrid Tuner
|
||||
tuner=79 - Philips PAL/SECAM multi (FM1216 MK5)
|
||||
tuner=80 - Philips FQ1216LME MK3 PAL/SECAM w/active loopthrough
|
||||
tuner=81 - Partsnic (Daewoo) PTI-5NF05
|
||||
tuner=82 - Philips CU1216L
|
||||
tuner=83 - NXP TDA18271
|
||||
tuner=84 - Sony BTF-Pxn01Z
|
||||
tuner=85 - Philips FQ1236 MK5
|
||||
tuner=86 - Tena TNF5337 MFD
|
||||
tuner=87 - Xceive 4000 tuner
|
||||
tuner=88 - Xceive 5000C tuner
|
||||
tuner=89 - Sony BTF-PG472Z PAL/SECAM
|
||||
tuner=90 - Sony BTF-PK467Z NTSC-M-JP
|
||||
tuner=91 - Sony BTF-PB463Z NTSC-M
|
||||
============ =====================================================
|
||||
Tuner number Card name
|
||||
============ =====================================================
|
||||
0 Temic PAL (4002 FH5)
|
||||
1 Philips PAL_I (FI1246 and compatibles)
|
||||
2 Philips NTSC (FI1236,FM1236 and compatibles)
|
||||
3 Philips (SECAM+PAL_BG) (FI1216MF, FM1216MF, FR1216MF)
|
||||
4 NoTuner
|
||||
5 Philips PAL_BG (FI1216 and compatibles)
|
||||
6 Temic NTSC (4032 FY5)
|
||||
7 Temic PAL_I (4062 FY5)
|
||||
8 Temic NTSC (4036 FY5)
|
||||
9 Alps HSBH1
|
||||
10 Alps TSBE1
|
||||
11 Alps TSBB5
|
||||
12 Alps TSBE5
|
||||
13 Alps TSBC5
|
||||
14 Temic PAL_BG (4006FH5)
|
||||
15 Alps TSCH6
|
||||
16 Temic PAL_DK (4016 FY5)
|
||||
17 Philips NTSC_M (MK2)
|
||||
18 Temic PAL_I (4066 FY5)
|
||||
19 Temic PAL* auto (4006 FN5)
|
||||
20 Temic PAL_BG (4009 FR5) or PAL_I (4069 FR5)
|
||||
21 Temic NTSC (4039 FR5)
|
||||
22 Temic PAL/SECAM multi (4046 FM5)
|
||||
23 Philips PAL_DK (FI1256 and compatibles)
|
||||
24 Philips PAL/SECAM multi (FQ1216ME)
|
||||
25 LG PAL_I+FM (TAPC-I001D)
|
||||
26 LG PAL_I (TAPC-I701D)
|
||||
27 LG NTSC+FM (TPI8NSR01F)
|
||||
28 LG PAL_BG+FM (TPI8PSB01D)
|
||||
29 LG PAL_BG (TPI8PSB11D)
|
||||
30 Temic PAL* auto + FM (4009 FN5)
|
||||
31 SHARP NTSC_JP (2U5JF5540)
|
||||
32 Samsung PAL TCPM9091PD27
|
||||
33 MT20xx universal
|
||||
34 Temic PAL_BG (4106 FH5)
|
||||
35 Temic PAL_DK/SECAM_L (4012 FY5)
|
||||
36 Temic NTSC (4136 FY5)
|
||||
37 LG PAL (newer TAPC series)
|
||||
38 Philips PAL/SECAM multi (FM1216ME MK3)
|
||||
39 LG NTSC (newer TAPC series)
|
||||
40 HITACHI V7-J180AT
|
||||
41 Philips PAL_MK (FI1216 MK)
|
||||
42 Philips FCV1236D ATSC/NTSC dual in
|
||||
43 Philips NTSC MK3 (FM1236MK3 or FM1236/F)
|
||||
44 Philips 4 in 1 (ATI TV Wonder Pro/Conexant)
|
||||
45 Microtune 4049 FM5
|
||||
46 Panasonic VP27s/ENGE4324D
|
||||
47 LG NTSC (TAPE series)
|
||||
48 Tenna TNF 8831 BGFF)
|
||||
49 Microtune 4042 FI5 ATSC/NTSC dual in
|
||||
50 TCL 2002N
|
||||
51 Philips PAL/SECAM_D (FM 1256 I-H3)
|
||||
52 Thomson DTT 7610 (ATSC/NTSC)
|
||||
53 Philips FQ1286
|
||||
54 Philips/NXP TDA 8290/8295 + 8275/8275A/18271
|
||||
55 TCL 2002MB
|
||||
56 Philips PAL/SECAM multi (FQ1216AME MK4)
|
||||
57 Philips FQ1236A MK4
|
||||
58 Ymec TVision TVF-8531MF/8831MF/8731MF
|
||||
59 Ymec TVision TVF-5533MF
|
||||
60 Thomson DTT 761X (ATSC/NTSC)
|
||||
61 Tena TNF9533-D/IF/TNF9533-B/DF
|
||||
62 Philips TEA5767HN FM Radio
|
||||
63 Philips FMD1216ME MK3 Hybrid Tuner
|
||||
64 LG TDVS-H06xF
|
||||
65 Ymec TVF66T5-B/DFF
|
||||
66 LG TALN series
|
||||
67 Philips TD1316 Hybrid Tuner
|
||||
68 Philips TUV1236D ATSC/NTSC dual in
|
||||
69 Tena TNF 5335 and similar models
|
||||
70 Samsung TCPN 2121P30A
|
||||
71 Xceive xc2028/xc3028 tuner
|
||||
72 Thomson FE6600
|
||||
73 Samsung TCPG 6121P30A
|
||||
75 Philips TEA5761 FM Radio
|
||||
76 Xceive 5000 tuner
|
||||
77 TCL tuner MF02GIP-5N-E
|
||||
78 Philips FMD1216MEX MK3 Hybrid Tuner
|
||||
79 Philips PAL/SECAM multi (FM1216 MK5)
|
||||
80 Philips FQ1216LME MK3 PAL/SECAM w/active loopthrough
|
||||
81 Partsnic (Daewoo) PTI-5NF05
|
||||
82 Philips CU1216L
|
||||
83 NXP TDA18271
|
||||
84 Sony BTF-Pxn01Z
|
||||
85 Philips FQ1236 MK5
|
||||
86 Tena TNF5337 MFD
|
||||
87 Xceive 4000 tuner
|
||||
88 Xceive 5000C tuner
|
||||
89 Sony BTF-PG472Z PAL/SECAM
|
||||
90 Sony BTF-PK467Z NTSC-M-JP
|
||||
91 Sony BTF-PB463Z NTSC-M
|
||||
============ =====================================================
|
||||
|
|
|
@ -1,72 +1,74 @@
|
|||
Usbvision cards list
|
||||
USBvision cards list
|
||||
====================
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
0 -> Xanboo [0a6f:0400]
|
||||
1 -> Belkin USB VideoBus II Adapter [050d:0106]
|
||||
2 -> Belkin Components USB VideoBus [050d:0207]
|
||||
3 -> Belkin USB VideoBus II [050d:0208]
|
||||
4 -> echoFX InterView Lite [0571:0002]
|
||||
5 -> USBGear USBG-V1 resp. HAMA USB [0573:0003]
|
||||
6 -> D-Link V100 [0573:0400]
|
||||
7 -> X10 USB Camera [0573:2000]
|
||||
8 -> Hauppauge WinTV USB Live (PAL B/G) [0573:2d00]
|
||||
9 -> Hauppauge WinTV USB Live Pro (NTSC M/N) [0573:2d01]
|
||||
10 -> Zoran Co. PMD (Nogatech) AV-grabber Manhattan [0573:2101]
|
||||
11 -> Nogatech USB-TV (NTSC) FM [0573:4100]
|
||||
12 -> PNY USB-TV (NTSC) FM [0573:4110]
|
||||
13 -> PixelView PlayTv-USB PRO (PAL) FM [0573:4450]
|
||||
14 -> ZTV ZT-721 2.4GHz USB A/V Receiver [0573:4550]
|
||||
15 -> Hauppauge WinTV USB (NTSC M/N) [0573:4d00]
|
||||
16 -> Hauppauge WinTV USB (PAL B/G) [0573:4d01]
|
||||
17 -> Hauppauge WinTV USB (PAL I) [0573:4d02]
|
||||
18 -> Hauppauge WinTV USB (PAL/SECAM L) [0573:4d03]
|
||||
19 -> Hauppauge WinTV USB (PAL D/K) [0573:4d04]
|
||||
20 -> Hauppauge WinTV USB (NTSC FM) [0573:4d10]
|
||||
21 -> Hauppauge WinTV USB (PAL B/G FM) [0573:4d11]
|
||||
22 -> Hauppauge WinTV USB (PAL I FM) [0573:4d12]
|
||||
23 -> Hauppauge WinTV USB (PAL D/K FM) [0573:4d14]
|
||||
24 -> Hauppauge WinTV USB Pro (NTSC M/N) [0573:4d2a]
|
||||
25 -> Hauppauge WinTV USB Pro (NTSC M/N) V2 [0573:4d2b]
|
||||
26 -> Hauppauge WinTV USB Pro (PAL/SECAM B/G/I/D/K/L) [0573:4d2c]
|
||||
27 -> Hauppauge WinTV USB Pro (NTSC M/N) V3 [0573:4d20]
|
||||
28 -> Hauppauge WinTV USB Pro (PAL B/G) [0573:4d21]
|
||||
29 -> Hauppauge WinTV USB Pro (PAL I) [0573:4d22]
|
||||
30 -> Hauppauge WinTV USB Pro (PAL/SECAM L) [0573:4d23]
|
||||
31 -> Hauppauge WinTV USB Pro (PAL D/K) [0573:4d24]
|
||||
32 -> Hauppauge WinTV USB Pro (PAL/SECAM BGDK/I/L) [0573:4d25]
|
||||
33 -> Hauppauge WinTV USB Pro (PAL/SECAM BGDK/I/L) V2 [0573:4d26]
|
||||
34 -> Hauppauge WinTV USB Pro (PAL B/G) V2 [0573:4d27]
|
||||
35 -> Hauppauge WinTV USB Pro (PAL B/G,D/K) [0573:4d28]
|
||||
36 -> Hauppauge WinTV USB Pro (PAL I,D/K) [0573:4d29]
|
||||
37 -> Hauppauge WinTV USB Pro (NTSC M/N FM) [0573:4d30]
|
||||
38 -> Hauppauge WinTV USB Pro (PAL B/G FM) [0573:4d31]
|
||||
39 -> Hauppauge WinTV USB Pro (PAL I FM) [0573:4d32]
|
||||
40 -> Hauppauge WinTV USB Pro (PAL D/K FM) [0573:4d34]
|
||||
41 -> Hauppauge WinTV USB Pro (Temic PAL/SECAM B/G/I/D/K/L FM) [0573:4d35]
|
||||
42 -> Hauppauge WinTV USB Pro (Temic PAL B/G FM) [0573:4d36]
|
||||
43 -> Hauppauge WinTV USB Pro (PAL/SECAM B/G/I/D/K/L FM) [0573:4d37]
|
||||
44 -> Hauppauge WinTV USB Pro (NTSC M/N FM) V2 [0573:4d38]
|
||||
45 -> Camtel Technology USB TV Genie Pro FM Model TVB330 [0768:0006]
|
||||
46 -> Digital Video Creator I [07d0:0001]
|
||||
47 -> Global Village GV-007 (NTSC) [07d0:0002]
|
||||
48 -> Dazzle Fusion Model DVC-50 Rev 1 (NTSC) [07d0:0003]
|
||||
49 -> Dazzle Fusion Model DVC-80 Rev 1 (PAL) [07d0:0004]
|
||||
50 -> Dazzle Fusion Model DVC-90 Rev 1 (SECAM) [07d0:0005]
|
||||
51 -> Eskape Labs MyTV2Go [07f8:9104]
|
||||
52 -> Pinnacle Studio PCTV USB (PAL) [2304:010d]
|
||||
53 -> Pinnacle Studio PCTV USB (SECAM) [2304:0109]
|
||||
54 -> Pinnacle Studio PCTV USB (PAL) FM [2304:0110]
|
||||
55 -> Miro PCTV USB [2304:0111]
|
||||
56 -> Pinnacle Studio PCTV USB (NTSC) FM [2304:0112]
|
||||
57 -> Pinnacle Studio PCTV USB (PAL) FM V2 [2304:0210]
|
||||
58 -> Pinnacle Studio PCTV USB (NTSC) FM V2 [2304:0212]
|
||||
59 -> Pinnacle Studio PCTV USB (PAL) FM V3 [2304:0214]
|
||||
60 -> Pinnacle Studio Linx Video input cable (NTSC) [2304:0300]
|
||||
61 -> Pinnacle Studio Linx Video input cable (PAL) [2304:0301]
|
||||
62 -> Pinnacle PCTV Bungee USB (PAL) FM [2304:0419]
|
||||
63 -> Hauppauge WinTv-USB [2400:4200]
|
||||
64 -> Pinnacle Studio PCTV USB (NTSC) FM V3 [2304:0113]
|
||||
65 -> Nogatech USB MicroCam NTSC (NV3000N) [0573:3000]
|
||||
66 -> Nogatech USB MicroCam PAL (NV3001P) [0573:3001]
|
||||
=========== ======================================================== =========
|
||||
Card number Card name USB IDs
|
||||
=========== ======================================================== =========
|
||||
0 Xanboo 0a6f:0400
|
||||
1 Belkin USB VideoBus II Adapter 050d:0106
|
||||
2 Belkin Components USB VideoBus 050d:0207
|
||||
3 Belkin USB VideoBus II 050d:0208
|
||||
4 echoFX InterView Lite 0571:0002
|
||||
5 USBGear USBG-V1 resp. HAMA USB 0573:0003
|
||||
6 D-Link V100 0573:0400
|
||||
7 X10 USB Camera 0573:2000
|
||||
8 Hauppauge WinTV USB Live (PAL B/G) 0573:2d00
|
||||
9 Hauppauge WinTV USB Live Pro (NTSC M/N) 0573:2d01
|
||||
10 Zoran Co. PMD (Nogatech) AV-grabber Manhattan 0573:2101
|
||||
11 Nogatech USB-TV (NTSC) FM 0573:4100
|
||||
12 PNY USB-TV (NTSC) FM 0573:4110
|
||||
13 PixelView PlayTv-USB PRO (PAL) FM 0573:4450
|
||||
14 ZTV ZT-721 2.4GHz USB A/V Receiver 0573:4550
|
||||
15 Hauppauge WinTV USB (NTSC M/N) 0573:4d00
|
||||
16 Hauppauge WinTV USB (PAL B/G) 0573:4d01
|
||||
17 Hauppauge WinTV USB (PAL I) 0573:4d02
|
||||
18 Hauppauge WinTV USB (PAL/SECAM L) 0573:4d03
|
||||
19 Hauppauge WinTV USB (PAL D/K) 0573:4d04
|
||||
20 Hauppauge WinTV USB (NTSC FM) 0573:4d10
|
||||
21 Hauppauge WinTV USB (PAL B/G FM) 0573:4d11
|
||||
22 Hauppauge WinTV USB (PAL I FM) 0573:4d12
|
||||
23 Hauppauge WinTV USB (PAL D/K FM) 0573:4d14
|
||||
24 Hauppauge WinTV USB Pro (NTSC M/N) 0573:4d2a
|
||||
25 Hauppauge WinTV USB Pro (NTSC M/N) V2 0573:4d2b
|
||||
26 Hauppauge WinTV USB Pro (PAL/SECAM B/G/I/D/K/L) 0573:4d2c
|
||||
27 Hauppauge WinTV USB Pro (NTSC M/N) V3 0573:4d20
|
||||
28 Hauppauge WinTV USB Pro (PAL B/G) 0573:4d21
|
||||
29 Hauppauge WinTV USB Pro (PAL I) 0573:4d22
|
||||
30 Hauppauge WinTV USB Pro (PAL/SECAM L) 0573:4d23
|
||||
31 Hauppauge WinTV USB Pro (PAL D/K) 0573:4d24
|
||||
32 Hauppauge WinTV USB Pro (PAL/SECAM BGDK/I/L) 0573:4d25
|
||||
33 Hauppauge WinTV USB Pro (PAL/SECAM BGDK/I/L) V2 0573:4d26
|
||||
34 Hauppauge WinTV USB Pro (PAL B/G) V2 0573:4d27
|
||||
35 Hauppauge WinTV USB Pro (PAL B/G,D/K) 0573:4d28
|
||||
36 Hauppauge WinTV USB Pro (PAL I,D/K) 0573:4d29
|
||||
37 Hauppauge WinTV USB Pro (NTSC M/N FM) 0573:4d30
|
||||
38 Hauppauge WinTV USB Pro (PAL B/G FM) 0573:4d31
|
||||
39 Hauppauge WinTV USB Pro (PAL I FM) 0573:4d32
|
||||
40 Hauppauge WinTV USB Pro (PAL D/K FM) 0573:4d34
|
||||
41 Hauppauge WinTV USB Pro (Temic PAL/SECAM B/G/I/D/K/L FM) 0573:4d35
|
||||
42 Hauppauge WinTV USB Pro (Temic PAL B/G FM) 0573:4d36
|
||||
43 Hauppauge WinTV USB Pro (PAL/SECAM B/G/I/D/K/L FM) 0573:4d37
|
||||
44 Hauppauge WinTV USB Pro (NTSC M/N FM) V2 0573:4d38
|
||||
45 Camtel Technology USB TV Genie Pro FM Model TVB330 0768:0006
|
||||
46 Digital Video Creator I 07d0:0001
|
||||
47 Global Village GV-007 (NTSC) 07d0:0002
|
||||
48 Dazzle Fusion Model DVC-50 Rev 1 (NTSC) 07d0:0003
|
||||
49 Dazzle Fusion Model DVC-80 Rev 1 (PAL) 07d0:0004
|
||||
50 Dazzle Fusion Model DVC-90 Rev 1 (SECAM) 07d0:0005
|
||||
51 Eskape Labs MyTV2Go 07f8:9104
|
||||
52 Pinnacle Studio PCTV USB (PAL) 2304:010d
|
||||
53 Pinnacle Studio PCTV USB (SECAM) 2304:0109
|
||||
54 Pinnacle Studio PCTV USB (PAL) FM 2304:0110
|
||||
55 Miro PCTV USB 2304:0111
|
||||
56 Pinnacle Studio PCTV USB (NTSC) FM 2304:0112
|
||||
57 Pinnacle Studio PCTV USB (PAL) FM V2 2304:0210
|
||||
58 Pinnacle Studio PCTV USB (NTSC) FM V2 2304:0212
|
||||
59 Pinnacle Studio PCTV USB (PAL) FM V3 2304:0214
|
||||
60 Pinnacle Studio Linx Video input cable (NTSC) 2304:0300
|
||||
61 Pinnacle Studio Linx Video input cable (PAL) 2304:0301
|
||||
62 Pinnacle PCTV Bungee USB (PAL) FM 2304:0419
|
||||
63 Hauppauge WinTv-USB 2400:4200
|
||||
64 Pinnacle Studio PCTV USB (NTSC) FM V3 2304:0113
|
||||
65 Nogatech USB MicroCam NTSC (NV3000N) 0573:3000
|
||||
66 Nogatech USB MicroCam PAL (NV3001P) 0573:3001
|
||||
=========== ======================================================== =========
|
||||
|
|
|
@ -87,6 +87,10 @@ replace symbol V4L2_YCBCR_ENC_XV601 :c:type:`v4l2_ycbcr_encoding`
|
|||
replace symbol V4L2_YCBCR_ENC_XV709 :c:type:`v4l2_ycbcr_encoding`
|
||||
replace symbol V4L2_YCBCR_ENC_SMPTE240M :c:type:`v4l2_ycbcr_encoding`
|
||||
|
||||
# Documented enum v4l2_hsv_encoding
|
||||
replace symbol V4L2_HSV_ENC_180 :c:type:`v4l2_hsv_encoding`
|
||||
replace symbol V4L2_HSV_ENC_256 :c:type:`v4l2_hsv_encoding`
|
||||
|
||||
# Documented enum v4l2_quantization
|
||||
replace symbol V4L2_QUANTIZATION_DEFAULT :c:type:`v4l2_quantization`
|
||||
replace symbol V4L2_QUANTIZATION_FULL_RANGE :c:type:`v4l2_quantization`
|
||||
|
@ -276,6 +280,9 @@ replace define V4L2_DV_FL_REDUCED_FPS dv-bt-standards
|
|||
replace define V4L2_DV_FL_HALF_LINE dv-bt-standards
|
||||
replace define V4L2_DV_FL_IS_CE_VIDEO dv-bt-standards
|
||||
replace define V4L2_DV_FL_FIRST_FIELD_EXTRA_LINE dv-bt-standards
|
||||
replace define V4L2_DV_FL_HAS_PICTURE_ASPECT dv-bt-standards
|
||||
replace define V4L2_DV_FL_HAS_CEA861_VIC dv-bt-standards
|
||||
replace define V4L2_DV_FL_HAS_HDMI_VIC dv-bt-standards
|
||||
|
||||
replace define V4L2_DV_BT_656_1120 dv-timing-types
|
||||
|
||||
|
|
43
MAINTAINERS
|
@ -2982,15 +2982,15 @@ L: linux-media@vger.kernel.org
|
|||
T: git git://linuxtv.org/media_tree.git
|
||||
W: http://linuxtv.org
|
||||
S: Supported
|
||||
F: Documentation/cec.txt
|
||||
F: Documentation/media/kapi/cec-core.rst
|
||||
F: Documentation/media/uapi/cec
|
||||
F: drivers/staging/media/cec/
|
||||
F: drivers/media/cec/
|
||||
F: drivers/media/cec-edid.c
|
||||
F: drivers/media/rc/keymaps/rc-cec.c
|
||||
F: include/media/cec.h
|
||||
F: include/media/cec-edid.h
|
||||
F: include/linux/cec.h
|
||||
F: include/linux/cec-funcs.h
|
||||
F: include/uapi/linux/cec.h
|
||||
F: include/uapi/linux/cec-funcs.h
|
||||
|
||||
CELL BROADBAND ENGINE ARCHITECTURE
|
||||
M: Arnd Bergmann <arnd@arndb.de>
|
||||
|
@ -7748,6 +7748,15 @@ F: Documentation/devicetree/bindings/media/renesas,fcp.txt
|
|||
F: drivers/media/platform/rcar-fcp.c
|
||||
F: include/media/rcar-fcp.h
|
||||
|
||||
MEDIA DRIVERS FOR RENESAS - FDP1
|
||||
M: Kieran Bingham <kieran@bingham.xyz>
|
||||
L: linux-media@vger.kernel.org
|
||||
L: linux-renesas-soc@vger.kernel.org
|
||||
T: git git://linuxtv.org/media_tree.git
|
||||
S: Supported
|
||||
F: Documentation/devicetree/bindings/media/renesas,fdp1.txt
|
||||
F: drivers/media/platform/rcar_fdp1.c
|
||||
|
||||
MEDIA DRIVERS FOR RENESAS - VIN
|
||||
M: Niklas Söderlund <niklas.soderlund@ragnatech.se>
|
||||
L: linux-media@vger.kernel.org
|
||||
|
@ -7854,6 +7863,24 @@ L: netdev@vger.kernel.org
|
|||
S: Maintained
|
||||
F: drivers/net/ethernet/mediatek/
|
||||
|
||||
MEDIATEK MEDIA DRIVER
|
||||
M: Tiffany Lin <tiffany.lin@mediatek.com>
|
||||
M: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
|
||||
S: Supported
|
||||
F: drivers/media/platform/mtk-vcodec/
|
||||
F: drivers/media/platform/mtk-vpu/
|
||||
F: Documentation/devicetree/bindings/media/mediatek-vcodec.txt
|
||||
F: Documentation/devicetree/bindings/media/mediatek-vpu.txt
|
||||
|
||||
MEDIATEK MDP DRIVER
|
||||
M: Minghsiu Tsai <minghsiu.tsai@mediatek.com>
|
||||
M: Houlong Wei <houlong.wei@mediatek.com>
|
||||
M: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
|
||||
S: Supported
|
||||
F: drivers/media/platform/mtk-mdp/
|
||||
F: drivers/media/platform/mtk-vpu/
|
||||
F: Documentation/devicetree/bindings/media/mediatek-mdp.txt
|
||||
|
||||
MEDIATEK MT7601U WIRELESS LAN DRIVER
|
||||
M: Jakub Kicinski <kubakici@wp.pl>
|
||||
L: linux-wireless@vger.kernel.org
|
||||
|
@ -9803,7 +9830,7 @@ M: Hans Verkuil <hverkuil@xs4all.nl>
|
|||
L: linux-media@vger.kernel.org
|
||||
T: git git://linuxtv.org/media_tree.git
|
||||
S: Maintained
|
||||
F: drivers/staging/media/pulse8-cec
|
||||
F: drivers/media/usb/pulse8-cec/*
|
||||
|
||||
PVRUSB2 VIDEO4LINUX DRIVER
|
||||
M: Mike Isely <isely@pobox.com>
|
||||
|
@ -10623,6 +10650,12 @@ S: Maintained
|
|||
F: Documentation/devicetree/bindings/serial/
|
||||
F: drivers/tty/serial/
|
||||
|
||||
SERIAL IR RECEIVER
|
||||
M: Sean Young <sean@mess.org>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/media/rc/serial_ir.c
|
||||
|
||||
STI CEC DRIVER
|
||||
M: Benjamin Gaignard <benjamin.gaignard@linaro.org>
|
||||
L: kernel@stlinux.com
|
||||
|
|
|
@ -41,6 +41,14 @@ aliases {
|
|||
dpi0 = &dpi0;
|
||||
dsi0 = &dsi0;
|
||||
dsi1 = &dsi1;
|
||||
mdp_rdma0 = &mdp_rdma0;
|
||||
mdp_rdma1 = &mdp_rdma1;
|
||||
mdp_rsz0 = &mdp_rsz0;
|
||||
mdp_rsz1 = &mdp_rsz1;
|
||||
mdp_rsz2 = &mdp_rsz2;
|
||||
mdp_wdma0 = &mdp_wdma0;
|
||||
mdp_wrot0 = &mdp_wrot0;
|
||||
mdp_wrot1 = &mdp_wrot1;
|
||||
};
|
||||
|
||||
cpus {
|
||||
|
@ -755,6 +763,82 @@ mmsys: clock-controller@14000000 {
|
|||
#clock-cells = <1>;
|
||||
};
|
||||
|
||||
mdp {
|
||||
compatible = "mediatek,mt8173-mdp";
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
ranges;
|
||||
mediatek,vpu = <&vpu>;
|
||||
|
||||
mdp_rdma0: rdma@14001000 {
|
||||
compatible = "mediatek,mt8173-mdp-rdma";
|
||||
reg = <0 0x14001000 0 0x1000>;
|
||||
clocks = <&mmsys CLK_MM_MDP_RDMA0>,
|
||||
<&mmsys CLK_MM_MUTEX_32K>;
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
iommus = <&iommu M4U_PORT_MDP_RDMA0>;
|
||||
mediatek,larb = <&larb0>;
|
||||
};
|
||||
|
||||
mdp_rdma1: rdma@14002000 {
|
||||
compatible = "mediatek,mt8173-mdp-rdma";
|
||||
reg = <0 0x14002000 0 0x1000>;
|
||||
clocks = <&mmsys CLK_MM_MDP_RDMA1>,
|
||||
<&mmsys CLK_MM_MUTEX_32K>;
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
iommus = <&iommu M4U_PORT_MDP_RDMA1>;
|
||||
mediatek,larb = <&larb4>;
|
||||
};
|
||||
|
||||
mdp_rsz0: rsz@14003000 {
|
||||
compatible = "mediatek,mt8173-mdp-rsz";
|
||||
reg = <0 0x14003000 0 0x1000>;
|
||||
clocks = <&mmsys CLK_MM_MDP_RSZ0>;
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
};
|
||||
|
||||
mdp_rsz1: rsz@14004000 {
|
||||
compatible = "mediatek,mt8173-mdp-rsz";
|
||||
reg = <0 0x14004000 0 0x1000>;
|
||||
clocks = <&mmsys CLK_MM_MDP_RSZ1>;
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
};
|
||||
|
||||
mdp_rsz2: rsz@14005000 {
|
||||
compatible = "mediatek,mt8173-mdp-rsz";
|
||||
reg = <0 0x14005000 0 0x1000>;
|
||||
clocks = <&mmsys CLK_MM_MDP_RSZ2>;
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
};
|
||||
|
||||
mdp_wdma0: wdma@14006000 {
|
||||
compatible = "mediatek,mt8173-mdp-wdma";
|
||||
reg = <0 0x14006000 0 0x1000>;
|
||||
clocks = <&mmsys CLK_MM_MDP_WDMA>;
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
iommus = <&iommu M4U_PORT_MDP_WDMA>;
|
||||
mediatek,larb = <&larb0>;
|
||||
};
|
||||
|
||||
mdp_wrot0: wrot@14007000 {
|
||||
compatible = "mediatek,mt8173-mdp-wrot";
|
||||
reg = <0 0x14007000 0 0x1000>;
|
||||
clocks = <&mmsys CLK_MM_MDP_WROT0>;
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
iommus = <&iommu M4U_PORT_MDP_WROT0>;
|
||||
mediatek,larb = <&larb0>;
|
||||
};
|
||||
|
||||
mdp_wrot1: wrot@14008000 {
|
||||
compatible = "mediatek,mt8173-mdp-wrot";
|
||||
reg = <0 0x14008000 0 0x1000>;
|
||||
clocks = <&mmsys CLK_MM_MDP_WROT1>;
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
|
||||
iommus = <&iommu M4U_PORT_MDP_WROT1>;
|
||||
mediatek,larb = <&larb4>;
|
||||
};
|
||||
};
|
||||
|
||||
ovl0: ovl@1400c000 {
|
||||
compatible = "mediatek,mt8173-disp-ovl";
|
||||
reg = <0 0x1400c000 0 0x1000>;
|
||||
|
@ -1051,6 +1135,50 @@ vdecsys: clock-controller@16000000 {
|
|||
#clock-cells = <1>;
|
||||
};
|
||||
|
||||
vcodec_dec: vcodec@16000000 {
|
||||
compatible = "mediatek,mt8173-vcodec-dec";
|
||||
reg = <0 0x16000000 0 0x100>, /* VDEC_SYS */
|
||||
<0 0x16020000 0 0x1000>, /* VDEC_MISC */
|
||||
<0 0x16021000 0 0x800>, /* VDEC_LD */
|
||||
<0 0x16021800 0 0x800>, /* VDEC_TOP */
|
||||
<0 0x16022000 0 0x1000>, /* VDEC_CM */
|
||||
<0 0x16023000 0 0x1000>, /* VDEC_AD */
|
||||
<0 0x16024000 0 0x1000>, /* VDEC_AV */
|
||||
<0 0x16025000 0 0x1000>, /* VDEC_PP */
|
||||
<0 0x16026800 0 0x800>, /* VDEC_HWD */
|
||||
<0 0x16027000 0 0x800>, /* VDEC_HWQ */
|
||||
<0 0x16027800 0 0x800>, /* VDEC_HWB */
|
||||
<0 0x16028400 0 0x400>; /* VDEC_HWG */
|
||||
interrupts = <GIC_SPI 204 IRQ_TYPE_LEVEL_LOW>;
|
||||
mediatek,larb = <&larb1>;
|
||||
iommus = <&iommu M4U_PORT_HW_VDEC_MC_EXT>,
|
||||
<&iommu M4U_PORT_HW_VDEC_PP_EXT>,
|
||||
<&iommu M4U_PORT_HW_VDEC_AVC_MV_EXT>,
|
||||
<&iommu M4U_PORT_HW_VDEC_PRED_RD_EXT>,
|
||||
<&iommu M4U_PORT_HW_VDEC_PRED_WR_EXT>,
|
||||
<&iommu M4U_PORT_HW_VDEC_UFO_EXT>,
|
||||
<&iommu M4U_PORT_HW_VDEC_VLD_EXT>,
|
||||
<&iommu M4U_PORT_HW_VDEC_VLD2_EXT>;
|
||||
mediatek,vpu = <&vpu>;
|
||||
power-domains = <&scpsys MT8173_POWER_DOMAIN_VDEC>;
|
||||
clocks = <&apmixedsys CLK_APMIXED_VCODECPLL>,
|
||||
<&topckgen CLK_TOP_UNIVPLL_D2>,
|
||||
<&topckgen CLK_TOP_CCI400_SEL>,
|
||||
<&topckgen CLK_TOP_VDEC_SEL>,
|
||||
<&topckgen CLK_TOP_VCODECPLL>,
|
||||
<&apmixedsys CLK_APMIXED_VENCPLL>,
|
||||
<&topckgen CLK_TOP_VENC_LT_SEL>,
|
||||
<&topckgen CLK_TOP_VCODECPLL_370P5>;
|
||||
clock-names = "vcodecpll",
|
||||
"univpll_d2",
|
||||
"clk_cci400_sel",
|
||||
"vdec_sel",
|
||||
"vdecpll",
|
||||
"vencpll",
|
||||
"venc_lt_sel",
|
||||
"vdec_bus_clk_src";
|
||||
};
|
||||
|
||||
larb1: larb@16010000 {
|
||||
compatible = "mediatek,mt8173-smi-larb";
|
||||
reg = <0 0x16010000 0 0x1000>;
|
||||
|
|
|
@ -80,6 +80,22 @@ config MEDIA_RC_SUPPORT
|
|||
|
||||
Say Y when you have a TV or an IR device.
|
||||
|
||||
config MEDIA_CEC_SUPPORT
|
||||
bool "HDMI CEC support"
|
||||
select MEDIA_CEC_EDID
|
||||
---help---
|
||||
Enable support for HDMI CEC (Consumer Electronics Control),
|
||||
which is an optional HDMI feature.
|
||||
|
||||
Say Y when you have an HDMI receiver, transmitter or a USB CEC
|
||||
adapter that supports HDMI CEC.
|
||||
|
||||
config MEDIA_CEC_DEBUG
|
||||
bool "HDMI CEC debugfs interface"
|
||||
depends on MEDIA_CEC_SUPPORT && DEBUG_FS
|
||||
---help---
|
||||
Turns on the DebugFS interface for CEC devices.
|
||||
|
||||
config MEDIA_CEC_EDID
|
||||
bool
|
||||
|
||||
|
@ -99,7 +115,7 @@ config MEDIA_CONTROLLER
|
|||
|
||||
config MEDIA_CONTROLLER_DVB
|
||||
bool "Enable Media controller for DVB (EXPERIMENTAL)"
|
||||
depends on MEDIA_CONTROLLER
|
||||
depends on MEDIA_CONTROLLER && DVB_CORE
|
||||
---help---
|
||||
Enable the media controller API support for DVB.
|
||||
|
||||
|
|
|
@ -6,6 +6,10 @@ ifeq ($(CONFIG_MEDIA_CEC_EDID),y)
|
|||
obj-$(CONFIG_MEDIA_SUPPORT) += cec-edid.o
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_MEDIA_CEC_SUPPORT),y)
|
||||
obj-$(CONFIG_MEDIA_SUPPORT) += cec/
|
||||
endif
|
||||
|
||||
media-objs := media-device.o media-devnode.o media-entity.o
|
||||
|
||||
#
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
cec-objs := cec-core.o cec-adap.o cec-api.o
|
||||
|
||||
ifeq ($(CONFIG_MEDIA_CEC),y)
|
||||
ifeq ($(CONFIG_MEDIA_CEC_SUPPORT),y)
|
||||
obj-$(CONFIG_MEDIA_SUPPORT) += cec.o
|
||||
endif
|
|
@ -587,7 +587,6 @@ int cec_transmit_msg_fh(struct cec_adapter *adap, struct cec_msg *msg,
|
|||
msg->tx_nack_cnt = 0;
|
||||
msg->tx_low_drive_cnt = 0;
|
||||
msg->tx_error_cnt = 0;
|
||||
msg->flags = 0;
|
||||
msg->sequence = ++adap->sequence;
|
||||
if (!msg->sequence)
|
||||
msg->sequence = ++adap->sequence;
|
||||
|
@ -596,6 +595,10 @@ int cec_transmit_msg_fh(struct cec_adapter *adap, struct cec_msg *msg,
|
|||
/* Make sure the timeout isn't 0. */
|
||||
msg->timeout = 1000;
|
||||
}
|
||||
if (msg->timeout)
|
||||
msg->flags &= CEC_MSG_FL_REPLY_TO_FOLLOWERS;
|
||||
else
|
||||
msg->flags = 0;
|
||||
|
||||
/* Sanity checks */
|
||||
if (msg->len == 0 || msg->len > CEC_MAX_MSG_SIZE) {
|
||||
|
@ -763,23 +766,133 @@ EXPORT_SYMBOL_GPL(cec_transmit_msg);
|
|||
static int cec_receive_notify(struct cec_adapter *adap, struct cec_msg *msg,
|
||||
bool is_reply);
|
||||
|
||||
#define DIRECTED 0x80
|
||||
#define BCAST1_4 0x40
|
||||
#define BCAST2_0 0x20 /* broadcast only allowed for >= 2.0 */
|
||||
#define BCAST (BCAST1_4 | BCAST2_0)
|
||||
#define BOTH (BCAST | DIRECTED)
|
||||
|
||||
/*
|
||||
* Specify minimum length and whether the message is directed, broadcast
|
||||
* or both. Messages that do not match the criteria are ignored as per
|
||||
* the CEC specification.
|
||||
*/
|
||||
static const u8 cec_msg_size[256] = {
|
||||
[CEC_MSG_ACTIVE_SOURCE] = 4 | BCAST,
|
||||
[CEC_MSG_IMAGE_VIEW_ON] = 2 | DIRECTED,
|
||||
[CEC_MSG_TEXT_VIEW_ON] = 2 | DIRECTED,
|
||||
[CEC_MSG_INACTIVE_SOURCE] = 4 | DIRECTED,
|
||||
[CEC_MSG_REQUEST_ACTIVE_SOURCE] = 2 | BCAST,
|
||||
[CEC_MSG_ROUTING_CHANGE] = 6 | BCAST,
|
||||
[CEC_MSG_ROUTING_INFORMATION] = 4 | BCAST,
|
||||
[CEC_MSG_SET_STREAM_PATH] = 4 | BCAST,
|
||||
[CEC_MSG_STANDBY] = 2 | BOTH,
|
||||
[CEC_MSG_RECORD_OFF] = 2 | DIRECTED,
|
||||
[CEC_MSG_RECORD_ON] = 3 | DIRECTED,
|
||||
[CEC_MSG_RECORD_STATUS] = 3 | DIRECTED,
|
||||
[CEC_MSG_RECORD_TV_SCREEN] = 2 | DIRECTED,
|
||||
[CEC_MSG_CLEAR_ANALOGUE_TIMER] = 13 | DIRECTED,
|
||||
[CEC_MSG_CLEAR_DIGITAL_TIMER] = 16 | DIRECTED,
|
||||
[CEC_MSG_CLEAR_EXT_TIMER] = 13 | DIRECTED,
|
||||
[CEC_MSG_SET_ANALOGUE_TIMER] = 13 | DIRECTED,
|
||||
[CEC_MSG_SET_DIGITAL_TIMER] = 16 | DIRECTED,
|
||||
[CEC_MSG_SET_EXT_TIMER] = 13 | DIRECTED,
|
||||
[CEC_MSG_SET_TIMER_PROGRAM_TITLE] = 2 | DIRECTED,
|
||||
[CEC_MSG_TIMER_CLEARED_STATUS] = 3 | DIRECTED,
|
||||
[CEC_MSG_TIMER_STATUS] = 3 | DIRECTED,
|
||||
[CEC_MSG_CEC_VERSION] = 3 | DIRECTED,
|
||||
[CEC_MSG_GET_CEC_VERSION] = 2 | DIRECTED,
|
||||
[CEC_MSG_GIVE_PHYSICAL_ADDR] = 2 | DIRECTED,
|
||||
[CEC_MSG_GET_MENU_LANGUAGE] = 2 | DIRECTED,
|
||||
[CEC_MSG_REPORT_PHYSICAL_ADDR] = 5 | BCAST,
|
||||
[CEC_MSG_SET_MENU_LANGUAGE] = 5 | BCAST,
|
||||
[CEC_MSG_REPORT_FEATURES] = 6 | BCAST,
|
||||
[CEC_MSG_GIVE_FEATURES] = 2 | DIRECTED,
|
||||
[CEC_MSG_DECK_CONTROL] = 3 | DIRECTED,
|
||||
[CEC_MSG_DECK_STATUS] = 3 | DIRECTED,
|
||||
[CEC_MSG_GIVE_DECK_STATUS] = 3 | DIRECTED,
|
||||
[CEC_MSG_PLAY] = 3 | DIRECTED,
|
||||
[CEC_MSG_GIVE_TUNER_DEVICE_STATUS] = 3 | DIRECTED,
|
||||
[CEC_MSG_SELECT_ANALOGUE_SERVICE] = 6 | DIRECTED,
|
||||
[CEC_MSG_SELECT_DIGITAL_SERVICE] = 9 | DIRECTED,
|
||||
[CEC_MSG_TUNER_DEVICE_STATUS] = 7 | DIRECTED,
|
||||
[CEC_MSG_TUNER_STEP_DECREMENT] = 2 | DIRECTED,
|
||||
[CEC_MSG_TUNER_STEP_INCREMENT] = 2 | DIRECTED,
|
||||
[CEC_MSG_DEVICE_VENDOR_ID] = 5 | BCAST,
|
||||
[CEC_MSG_GIVE_DEVICE_VENDOR_ID] = 2 | DIRECTED,
|
||||
[CEC_MSG_VENDOR_COMMAND] = 2 | DIRECTED,
|
||||
[CEC_MSG_VENDOR_COMMAND_WITH_ID] = 5 | BOTH,
|
||||
[CEC_MSG_VENDOR_REMOTE_BUTTON_DOWN] = 2 | BOTH,
|
||||
[CEC_MSG_VENDOR_REMOTE_BUTTON_UP] = 2 | BOTH,
|
||||
[CEC_MSG_SET_OSD_STRING] = 3 | DIRECTED,
|
||||
[CEC_MSG_GIVE_OSD_NAME] = 2 | DIRECTED,
|
||||
[CEC_MSG_SET_OSD_NAME] = 2 | DIRECTED,
|
||||
[CEC_MSG_MENU_REQUEST] = 3 | DIRECTED,
|
||||
[CEC_MSG_MENU_STATUS] = 3 | DIRECTED,
|
||||
[CEC_MSG_USER_CONTROL_PRESSED] = 3 | DIRECTED,
|
||||
[CEC_MSG_USER_CONTROL_RELEASED] = 2 | DIRECTED,
|
||||
[CEC_MSG_GIVE_DEVICE_POWER_STATUS] = 2 | DIRECTED,
|
||||
[CEC_MSG_REPORT_POWER_STATUS] = 3 | DIRECTED | BCAST2_0,
|
||||
[CEC_MSG_FEATURE_ABORT] = 4 | DIRECTED,
|
||||
[CEC_MSG_ABORT] = 2 | DIRECTED,
|
||||
[CEC_MSG_GIVE_AUDIO_STATUS] = 2 | DIRECTED,
|
||||
[CEC_MSG_GIVE_SYSTEM_AUDIO_MODE_STATUS] = 2 | DIRECTED,
|
||||
[CEC_MSG_REPORT_AUDIO_STATUS] = 3 | DIRECTED,
|
||||
[CEC_MSG_REPORT_SHORT_AUDIO_DESCRIPTOR] = 2 | DIRECTED,
|
||||
[CEC_MSG_REQUEST_SHORT_AUDIO_DESCRIPTOR] = 2 | DIRECTED,
|
||||
[CEC_MSG_SET_SYSTEM_AUDIO_MODE] = 3 | BOTH,
|
||||
[CEC_MSG_SYSTEM_AUDIO_MODE_REQUEST] = 2 | DIRECTED,
|
||||
[CEC_MSG_SYSTEM_AUDIO_MODE_STATUS] = 3 | DIRECTED,
|
||||
[CEC_MSG_SET_AUDIO_RATE] = 3 | DIRECTED,
|
||||
[CEC_MSG_INITIATE_ARC] = 2 | DIRECTED,
|
||||
[CEC_MSG_REPORT_ARC_INITIATED] = 2 | DIRECTED,
|
||||
[CEC_MSG_REPORT_ARC_TERMINATED] = 2 | DIRECTED,
|
||||
[CEC_MSG_REQUEST_ARC_INITIATION] = 2 | DIRECTED,
|
||||
[CEC_MSG_REQUEST_ARC_TERMINATION] = 2 | DIRECTED,
|
||||
[CEC_MSG_TERMINATE_ARC] = 2 | DIRECTED,
|
||||
[CEC_MSG_REQUEST_CURRENT_LATENCY] = 4 | BCAST,
|
||||
[CEC_MSG_REPORT_CURRENT_LATENCY] = 7 | BCAST,
|
||||
[CEC_MSG_CDC_MESSAGE] = 2 | BCAST,
|
||||
};
|
||||
|
||||
/* Called by the CEC adapter if a message is received */
|
||||
void cec_received_msg(struct cec_adapter *adap, struct cec_msg *msg)
|
||||
{
|
||||
struct cec_data *data;
|
||||
u8 msg_init = cec_msg_initiator(msg);
|
||||
u8 msg_dest = cec_msg_destination(msg);
|
||||
u8 cmd = msg->msg[1];
|
||||
bool is_reply = false;
|
||||
bool valid_la = true;
|
||||
u8 min_len = 0;
|
||||
|
||||
if (WARN_ON(!msg->len || msg->len > CEC_MAX_MSG_SIZE))
|
||||
return;
|
||||
|
||||
/*
|
||||
* Some CEC adapters will receive the messages that they transmitted.
|
||||
* This test filters out those messages by checking if we are the
|
||||
* initiator, and just returning in that case.
|
||||
*
|
||||
* Note that this won't work if this is an Unregistered device.
|
||||
*
|
||||
* It is bad practice if the hardware receives the message that it
|
||||
* transmitted and luckily most CEC adapters behave correctly in this
|
||||
* respect.
|
||||
*/
|
||||
if (msg_init != CEC_LOG_ADDR_UNREGISTERED &&
|
||||
cec_has_log_addr(adap, msg_init))
|
||||
return;
|
||||
|
||||
msg->rx_ts = ktime_get_ns();
|
||||
msg->rx_status = CEC_RX_STATUS_OK;
|
||||
msg->sequence = msg->reply = msg->timeout = 0;
|
||||
msg->tx_status = 0;
|
||||
msg->tx_ts = 0;
|
||||
msg->tx_arb_lost_cnt = 0;
|
||||
msg->tx_nack_cnt = 0;
|
||||
msg->tx_low_drive_cnt = 0;
|
||||
msg->tx_error_cnt = 0;
|
||||
msg->flags = 0;
|
||||
memset(msg->msg + msg->len, 0, sizeof(msg->msg) - msg->len);
|
||||
|
||||
|
@ -790,9 +903,71 @@ void cec_received_msg(struct cec_adapter *adap, struct cec_msg *msg)
|
|||
if (!cec_msg_is_broadcast(msg))
|
||||
valid_la = cec_has_log_addr(adap, msg_dest);
|
||||
|
||||
/*
|
||||
* Check if the length is not too short or if the message is a
|
||||
* broadcast message where a directed message was expected or
|
||||
* vice versa. If so, then the message has to be ignored (according
|
||||
* to section CEC 7.3 and CEC 12.2).
|
||||
*/
|
||||
if (valid_la && msg->len > 1 && cec_msg_size[cmd]) {
|
||||
u8 dir_fl = cec_msg_size[cmd] & BOTH;
|
||||
|
||||
min_len = cec_msg_size[cmd] & 0x1f;
|
||||
if (msg->len < min_len)
|
||||
valid_la = false;
|
||||
else if (!cec_msg_is_broadcast(msg) && !(dir_fl & DIRECTED))
|
||||
valid_la = false;
|
||||
else if (cec_msg_is_broadcast(msg) && !(dir_fl & BCAST1_4))
|
||||
valid_la = false;
|
||||
else if (cec_msg_is_broadcast(msg) &&
|
||||
adap->log_addrs.cec_version >= CEC_OP_CEC_VERSION_2_0 &&
|
||||
!(dir_fl & BCAST2_0))
|
||||
valid_la = false;
|
||||
}
|
||||
if (valid_la && min_len) {
|
||||
/* These messages have special length requirements */
|
||||
switch (cmd) {
|
||||
case CEC_MSG_TIMER_STATUS:
|
||||
if (msg->msg[2] & 0x10) {
|
||||
switch (msg->msg[2] & 0xf) {
|
||||
case CEC_OP_PROG_INFO_NOT_ENOUGH_SPACE:
|
||||
case CEC_OP_PROG_INFO_MIGHT_NOT_BE_ENOUGH_SPACE:
|
||||
if (msg->len < 5)
|
||||
valid_la = false;
|
||||
break;
|
||||
}
|
||||
} else if ((msg->msg[2] & 0xf) == CEC_OP_PROG_ERROR_DUPLICATE) {
|
||||
if (msg->len < 5)
|
||||
valid_la = false;
|
||||
}
|
||||
break;
|
||||
case CEC_MSG_RECORD_ON:
|
||||
switch (msg->msg[2]) {
|
||||
case CEC_OP_RECORD_SRC_OWN:
|
||||
break;
|
||||
case CEC_OP_RECORD_SRC_DIGITAL:
|
||||
if (msg->len < 10)
|
||||
valid_la = false;
|
||||
break;
|
||||
case CEC_OP_RECORD_SRC_ANALOG:
|
||||
if (msg->len < 7)
|
||||
valid_la = false;
|
||||
break;
|
||||
case CEC_OP_RECORD_SRC_EXT_PLUG:
|
||||
if (msg->len < 4)
|
||||
valid_la = false;
|
||||
break;
|
||||
case CEC_OP_RECORD_SRC_EXT_PHYS_ADDR:
|
||||
if (msg->len < 5)
|
||||
valid_la = false;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* It's a valid message and not a poll or CDC message */
|
||||
if (valid_la && msg->len > 1 && msg->msg[1] != CEC_MSG_CDC_MESSAGE) {
|
||||
u8 cmd = msg->msg[1];
|
||||
if (valid_la && msg->len > 1 && cmd != CEC_MSG_CDC_MESSAGE) {
|
||||
bool abort = cmd == CEC_MSG_FEATURE_ABORT;
|
||||
|
||||
/* The aborted command is in msg[2] */
|
||||
|
@ -806,6 +981,18 @@ void cec_received_msg(struct cec_adapter *adap, struct cec_msg *msg)
|
|||
list_for_each_entry(data, &adap->wait_queue, list) {
|
||||
struct cec_msg *dst = &data->msg;
|
||||
|
||||
/*
|
||||
* The *only* CEC message that has two possible replies
|
||||
* is CEC_MSG_INITIATE_ARC.
|
||||
* In this case allow either of the two replies.
|
||||
*/
|
||||
if (!abort && dst->msg[1] == CEC_MSG_INITIATE_ARC &&
|
||||
(cmd == CEC_MSG_REPORT_ARC_INITIATED ||
|
||||
cmd == CEC_MSG_REPORT_ARC_TERMINATED) &&
|
||||
(dst->reply == CEC_MSG_REPORT_ARC_INITIATED ||
|
||||
dst->reply == CEC_MSG_REPORT_ARC_TERMINATED))
|
||||
dst->reply = cmd;
|
||||
|
||||
/* Does the command match? */
|
||||
if ((abort && cmd != dst->msg[1]) ||
|
||||
(!abort && cmd != dst->reply))
|
||||
|
@ -823,6 +1010,7 @@ void cec_received_msg(struct cec_adapter *adap, struct cec_msg *msg)
|
|||
dst->rx_status = msg->rx_status;
|
||||
if (abort)
|
||||
dst->rx_status |= CEC_RX_STATUS_FEATURE_ABORT;
|
||||
msg->flags = dst->flags;
|
||||
/* Remove it from the wait_queue */
|
||||
list_del_init(&data->list);
|
||||
|
||||
|
@ -1068,7 +1256,8 @@ static int cec_config_thread_func(void *arg)
|
|||
mutex_unlock(&adap->lock);
|
||||
|
||||
for (i = 0; i < las->num_log_addrs; i++) {
|
||||
if (las->log_addr[i] == CEC_LOG_ADDR_INVALID)
|
||||
if (las->log_addr[i] == CEC_LOG_ADDR_INVALID ||
|
||||
(las->flags & CEC_LOG_ADDRS_FL_CDC_ONLY))
|
||||
continue;
|
||||
|
||||
/*
|
||||
|
@ -1190,6 +1379,29 @@ int __cec_s_log_addrs(struct cec_adapter *adap,
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (log_addrs->flags & CEC_LOG_ADDRS_FL_CDC_ONLY) {
|
||||
/*
|
||||
* Sanitize log_addrs fields if a CDC-Only device is
|
||||
* requested.
|
||||
*/
|
||||
log_addrs->num_log_addrs = 1;
|
||||
log_addrs->osd_name[0] = '\0';
|
||||
log_addrs->vendor_id = CEC_VENDOR_ID_NONE;
|
||||
log_addrs->log_addr_type[0] = CEC_LOG_ADDR_TYPE_UNREGISTERED;
|
||||
/*
|
||||
* This is just an internal convention since a CDC-Only device
|
||||
* doesn't have to be a switch. But switches already use
|
||||
* unregistered, so it makes some kind of sense to pick this
|
||||
* as the primary device. Since a CDC-Only device never sends
|
||||
* any 'normal' CEC messages this primary device type is never
|
||||
* sent over the CEC bus.
|
||||
*/
|
||||
log_addrs->primary_device_type[0] = CEC_OP_PRIM_DEVTYPE_SWITCH;
|
||||
log_addrs->all_device_types[0] = 0;
|
||||
log_addrs->features[0][0] = 0;
|
||||
log_addrs->features[0][1] = 0;
|
||||
}
|
||||
|
||||
/* Ensure the osd name is 0-terminated */
|
||||
log_addrs->osd_name[sizeof(log_addrs->osd_name) - 1] = '\0';
|
||||
|
||||
|
@ -1223,6 +1435,7 @@ int __cec_s_log_addrs(struct cec_adapter *adap,
|
|||
const u8 feature_sz = ARRAY_SIZE(log_addrs->features[0]);
|
||||
u8 *features = log_addrs->features[i];
|
||||
bool op_is_dev_features = false;
|
||||
unsigned j;
|
||||
|
||||
log_addrs->log_addr[i] = CEC_LOG_ADDR_INVALID;
|
||||
if (type_mask & (1 << log_addrs->log_addr_type[i])) {
|
||||
|
@ -1249,19 +1462,19 @@ int __cec_s_log_addrs(struct cec_adapter *adap,
|
|||
dprintk(1, "unknown logical address type\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
for (i = 0; i < feature_sz; i++) {
|
||||
if ((features[i] & 0x80) == 0) {
|
||||
for (j = 0; j < feature_sz; j++) {
|
||||
if ((features[j] & 0x80) == 0) {
|
||||
if (op_is_dev_features)
|
||||
break;
|
||||
op_is_dev_features = true;
|
||||
}
|
||||
}
|
||||
if (!op_is_dev_features || i == feature_sz) {
|
||||
if (!op_is_dev_features || j == feature_sz) {
|
||||
dprintk(1, "malformed features\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
/* Zero unused part of the feature array */
|
||||
memset(features + i + 1, 0, feature_sz - i - 1);
|
||||
memset(features + j + 1, 0, feature_sz - j - 1);
|
||||
}
|
||||
|
||||
if (log_addrs->cec_version >= CEC_OP_CEC_VERSION_2_0) {
|
||||
|
@ -1410,6 +1623,11 @@ static int cec_receive_notify(struct cec_adapter *adap, struct cec_msg *msg,
|
|||
|
||||
dprintk(1, "cec_receive_notify: %*ph\n", msg->len, msg->msg);
|
||||
|
||||
/* If this is a CDC-Only device, then ignore any non-CDC messages */
|
||||
if (cec_is_cdc_only(&adap->log_addrs) &&
|
||||
msg->msg[1] != CEC_MSG_CDC_MESSAGE)
|
||||
return 0;
|
||||
|
||||
if (adap->ops->received) {
|
||||
/* Allow drivers to process the message first */
|
||||
if (adap->ops->received(adap, msg) != -ENOMSG)
|
||||
|
@ -1478,7 +1696,8 @@ static int cec_receive_notify(struct cec_adapter *adap, struct cec_msg *msg,
|
|||
}
|
||||
|
||||
case CEC_MSG_USER_CONTROL_PRESSED:
|
||||
if (!(adap->capabilities & CEC_CAP_RC))
|
||||
if (!(adap->capabilities & CEC_CAP_RC) ||
|
||||
!(adap->log_addrs.flags & CEC_LOG_ADDRS_FL_ALLOW_RC_PASSTHRU))
|
||||
break;
|
||||
|
||||
#if IS_REACHABLE(CONFIG_RC_CORE)
|
||||
|
@ -1515,7 +1734,8 @@ static int cec_receive_notify(struct cec_adapter *adap, struct cec_msg *msg,
|
|||
break;
|
||||
|
||||
case CEC_MSG_USER_CONTROL_RELEASED:
|
||||
if (!(adap->capabilities & CEC_CAP_RC))
|
||||
if (!(adap->capabilities & CEC_CAP_RC) ||
|
||||
!(adap->log_addrs.flags & CEC_LOG_ADDRS_FL_ALLOW_RC_PASSTHRU))
|
||||
break;
|
||||
#if IS_REACHABLE(CONFIG_RC_CORE)
|
||||
rc_keyup(adap->rc);
|
||||
|
@ -1573,8 +1793,8 @@ static int cec_receive_notify(struct cec_adapter *adap, struct cec_msg *msg,
|
|||
}
|
||||
|
||||
skip_processing:
|
||||
/* If this was a reply, then we're done */
|
||||
if (is_reply)
|
||||
/* If this was a reply, then we're done, unless otherwise specified */
|
||||
if (is_reply && !(msg->flags & CEC_MSG_FL_REPLY_TO_FOLLOWERS))
|
||||
return 0;
|
||||
|
||||
/*
|
|
@ -88,7 +88,7 @@ static long cec_adap_g_caps(struct cec_adapter *adap,
|
|||
{
|
||||
struct cec_caps caps = {};
|
||||
|
||||
strlcpy(caps.driver, adap->devnode.parent->driver->name,
|
||||
strlcpy(caps.driver, adap->devnode.dev.parent->driver->name,
|
||||
sizeof(caps.driver));
|
||||
strlcpy(caps.name, adap->name, sizeof(caps.name));
|
||||
caps.available_log_addrs = adap->available_log_addrs;
|
||||
|
@ -162,7 +162,9 @@ static long cec_adap_s_log_addrs(struct cec_adapter *adap, struct cec_fh *fh,
|
|||
return -ENOTTY;
|
||||
if (copy_from_user(&log_addrs, parg, sizeof(log_addrs)))
|
||||
return -EFAULT;
|
||||
log_addrs.flags &= CEC_LOG_ADDRS_FL_ALLOW_UNREG_FALLBACK;
|
||||
log_addrs.flags &= CEC_LOG_ADDRS_FL_ALLOW_UNREG_FALLBACK |
|
||||
CEC_LOG_ADDRS_FL_ALLOW_RC_PASSTHRU |
|
||||
CEC_LOG_ADDRS_FL_CDC_ONLY;
|
||||
mutex_lock(&adap->lock);
|
||||
if (!adap->is_configuring &&
|
||||
(!log_addrs.num_log_addrs || !adap->is_configured) &&
|
||||
|
@ -189,6 +191,12 @@ static long cec_transmit(struct cec_adapter *adap, struct cec_fh *fh,
|
|||
return -ENOTTY;
|
||||
if (copy_from_user(&msg, parg, sizeof(msg)))
|
||||
return -EFAULT;
|
||||
|
||||
/* A CDC-Only device can only send CDC messages */
|
||||
if ((adap->log_addrs.flags & CEC_LOG_ADDRS_FL_CDC_ONLY) &&
|
||||
(msg.len == 1 || msg.msg[1] != CEC_MSG_CDC_MESSAGE))
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&adap->lock);
|
||||
if (!adap->is_configured)
|
||||
err = -ENONET;
|
||||
|
@ -273,6 +281,7 @@ static long cec_receive(struct cec_adapter *adap, struct cec_fh *fh,
|
|||
err = cec_receive_msg(fh, &msg, block);
|
||||
if (err)
|
||||
return err;
|
||||
msg.flags = 0;
|
||||
if (copy_to_user(parg, &msg, sizeof(msg)))
|
||||
return -EFAULT;
|
||||
return 0;
|
|
@ -132,7 +132,6 @@ static int __must_check cec_devnode_register(struct cec_devnode *devnode,
|
|||
devnode->dev.bus = &cec_bus_type;
|
||||
devnode->dev.devt = MKDEV(MAJOR(cec_dev_t), minor);
|
||||
devnode->dev.release = cec_devnode_release;
|
||||
devnode->dev.parent = devnode->parent;
|
||||
dev_set_name(&devnode->dev, "cec%d", devnode->minor);
|
||||
device_initialize(&devnode->dev);
|
||||
|
||||
|
@ -198,13 +197,11 @@ static void cec_devnode_unregister(struct cec_devnode *devnode)
|
|||
|
||||
struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops,
|
||||
void *priv, const char *name, u32 caps,
|
||||
u8 available_las, struct device *parent)
|
||||
u8 available_las)
|
||||
{
|
||||
struct cec_adapter *adap;
|
||||
int res;
|
||||
|
||||
if (WARN_ON(!parent))
|
||||
return ERR_PTR(-EINVAL);
|
||||
if (WARN_ON(!caps))
|
||||
return ERR_PTR(-EINVAL);
|
||||
if (WARN_ON(!ops))
|
||||
|
@ -214,8 +211,6 @@ struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops,
|
|||
adap = kzalloc(sizeof(*adap), GFP_KERNEL);
|
||||
if (!adap)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
adap->owner = parent->driver->owner;
|
||||
adap->devnode.parent = parent;
|
||||
strlcpy(adap->name, name, sizeof(adap->name));
|
||||
adap->phys_addr = CEC_PHYS_ADDR_INVALID;
|
||||
adap->log_addrs.cec_version = CEC_OP_CEC_VERSION_2_0;
|
||||
|
@ -264,7 +259,6 @@ struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops,
|
|||
adap->rc->input_id.vendor = 0;
|
||||
adap->rc->input_id.product = 0;
|
||||
adap->rc->input_id.version = 1;
|
||||
adap->rc->dev.parent = parent;
|
||||
adap->rc->driver_type = RC_DRIVER_SCANCODE;
|
||||
adap->rc->driver_name = CEC_NAME;
|
||||
adap->rc->allowed_protocols = RC_BIT_CEC;
|
||||
|
@ -278,14 +272,22 @@ struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops,
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(cec_allocate_adapter);
|
||||
|
||||
int cec_register_adapter(struct cec_adapter *adap)
|
||||
int cec_register_adapter(struct cec_adapter *adap,
|
||||
struct device *parent)
|
||||
{
|
||||
int res;
|
||||
|
||||
if (IS_ERR_OR_NULL(adap))
|
||||
return 0;
|
||||
|
||||
if (WARN_ON(!parent))
|
||||
return -EINVAL;
|
||||
|
||||
adap->owner = parent->driver->owner;
|
||||
adap->devnode.dev.parent = parent;
|
||||
|
||||
#if IS_REACHABLE(CONFIG_RC_CORE)
|
||||
adap->rc->dev.parent = parent;
|
||||
if (adap->capabilities & CEC_CAP_RC) {
|
||||
res = rc_register_device(adap->rc);
|
||||
|
|
@ -14,7 +14,6 @@
|
|||
|
||||
#include "dmxdev.h"
|
||||
#include "dvb_demux.h"
|
||||
#include "dvb_filter.h"
|
||||
#include "dvb_net.h"
|
||||
#include "dvb_frontend.h"
|
||||
|
||||
|
|
|
@ -136,8 +136,7 @@ int flexcop_eeprom_check_mac_addr(struct flexcop_device *fc, int extended)
|
|||
|
||||
if ((ret = flexcop_eeprom_lrc_read(fc,0x3f8,buf,8,4)) == 0) {
|
||||
if (extended != 0) {
|
||||
err("TODO: extended (EUI64) MAC addresses aren't "
|
||||
"completely supported yet");
|
||||
err("TODO: extended (EUI64) MAC addresses aren't completely supported yet");
|
||||
ret = -EINVAL;
|
||||
} else
|
||||
memcpy(fc->dvb_adapter.proposed_mac,buf,6);
|
||||
|
|
|
@ -33,8 +33,8 @@ static int flexcop_i2c_operation(struct flexcop_device *fc,
|
|||
return -EREMOTEIO;
|
||||
}
|
||||
}
|
||||
deb_i2c("tried %d times i2c operation, "
|
||||
"never finished or too many ack errors.\n", i);
|
||||
deb_i2c("tried %d times i2c operation, never finished or too many ack errors.\n",
|
||||
i);
|
||||
return -EREMOTEIO;
|
||||
}
|
||||
|
||||
|
@ -124,10 +124,10 @@ int flexcop_i2c_request(struct flexcop_i2c_adapter *i2c,
|
|||
#ifdef DUMP_I2C_MESSAGES
|
||||
printk(KERN_DEBUG "%d ", i2c->port);
|
||||
if (op == FC_READ)
|
||||
printk("rd(");
|
||||
printk(KERN_CONT "rd(");
|
||||
else
|
||||
printk("wr(");
|
||||
printk("%02x): %02x ", chipaddr, addr);
|
||||
printk(KERN_CONT "wr(");
|
||||
printk(KERN_CONT "%02x): %02x ", chipaddr, addr);
|
||||
#endif
|
||||
|
||||
/* in that case addr is the only value ->
|
||||
|
@ -151,7 +151,7 @@ int flexcop_i2c_request(struct flexcop_i2c_adapter *i2c,
|
|||
|
||||
#ifdef DUMP_I2C_MESSAGES
|
||||
for (i = 0; i < bytes_to_transfer; i++)
|
||||
printk("%02x ", buf[i]);
|
||||
printk(KERN_CONT "%02x ", buf[i]);
|
||||
#endif
|
||||
|
||||
if (ret < 0)
|
||||
|
@ -163,7 +163,7 @@ int flexcop_i2c_request(struct flexcop_i2c_adapter *i2c,
|
|||
}
|
||||
|
||||
#ifdef DUMP_I2C_MESSAGES
|
||||
printk("\n");
|
||||
printk(KERN_CONT "\n");
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -23,18 +23,15 @@ void flexcop_determine_revision(struct flexcop_device *fc)
|
|||
fc->rev = FLEXCOP_III;
|
||||
break;
|
||||
default:
|
||||
err("unknown FlexCop Revision: %x. Please report this to "
|
||||
"linux-dvb@linuxtv.org.",
|
||||
err("unknown FlexCop Revision: %x. Please report this to linux-dvb@linuxtv.org.",
|
||||
v.misc_204.Rev_N_sig_revision_hi);
|
||||
break;
|
||||
}
|
||||
|
||||
if ((fc->has_32_hw_pid_filter = v.misc_204.Rev_N_sig_caps))
|
||||
deb_info("this FlexCop has "
|
||||
"the additional 32 hardware pid filter.\n");
|
||||
deb_info("this FlexCop has the additional 32 hardware pid filter.\n");
|
||||
else
|
||||
deb_info("this FlexCop has "
|
||||
"the 6 basic main hardware pid filter.\n");
|
||||
deb_info("this FlexCop has the 6 basic main hardware pid filter.\n");
|
||||
/* bus parts have to decide if hw pid filtering is used or not. */
|
||||
}
|
||||
|
||||
|
|
|
@ -46,8 +46,7 @@ int b2c2_flexcop_debug;
|
|||
EXPORT_SYMBOL_GPL(b2c2_flexcop_debug);
|
||||
module_param_named(debug, b2c2_flexcop_debug, int, 0644);
|
||||
MODULE_PARM_DESC(debug,
|
||||
"set debug level (1=info,2=tuner,4=i2c,8=ts,"
|
||||
"16=sram,32=reg (|-able))."
|
||||
"set debug level (1=info,2=tuner,4=i2c,8=ts,16=sram,32=reg (|-able))."
|
||||
DEBSTATUS);
|
||||
#undef DEBSTATUS
|
||||
|
||||
|
|
|
@ -1190,8 +1190,8 @@ void cx2341x_log_status(const struct cx2341x_mpeg_params *p, const char *prefix)
|
|||
prefix,
|
||||
cx2341x_menu_item(p, V4L2_CID_MPEG_STREAM_TYPE));
|
||||
if (p->stream_insert_nav_packets)
|
||||
printk(" (with navigation packets)");
|
||||
printk("\n");
|
||||
printk(KERN_CONT " (with navigation packets)");
|
||||
printk(KERN_CONT "\n");
|
||||
printk(KERN_INFO "%s: VBI Format: %s\n",
|
||||
prefix,
|
||||
cx2341x_menu_item(p, V4L2_CID_MPEG_STREAM_VBI_FMT));
|
||||
|
@ -1209,8 +1209,8 @@ void cx2341x_log_status(const struct cx2341x_mpeg_params *p, const char *prefix)
|
|||
cx2341x_menu_item(p, V4L2_CID_MPEG_VIDEO_BITRATE_MODE),
|
||||
p->video_bitrate);
|
||||
if (p->video_bitrate_mode == V4L2_MPEG_VIDEO_BITRATE_MODE_VBR)
|
||||
printk(", Peak %d", p->video_bitrate_peak);
|
||||
printk("\n");
|
||||
printk(KERN_CONT ", Peak %d", p->video_bitrate_peak);
|
||||
printk(KERN_CONT "\n");
|
||||
printk(KERN_INFO
|
||||
"%s: Video: GOP Size %d, %d B-Frames, %sGOP Closure\n",
|
||||
prefix,
|
||||
|
@ -1232,9 +1232,9 @@ void cx2341x_log_status(const struct cx2341x_mpeg_params *p, const char *prefix)
|
|||
cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_MODE),
|
||||
p->audio_mute ? " (muted)" : "");
|
||||
if (p->audio_mode == V4L2_MPEG_AUDIO_MODE_JOINT_STEREO)
|
||||
printk(", %s", cx2341x_menu_item(p,
|
||||
printk(KERN_CONT ", %s", cx2341x_menu_item(p,
|
||||
V4L2_CID_MPEG_AUDIO_MODE_EXTENSION));
|
||||
printk(", %s, %s\n",
|
||||
printk(KERN_CONT ", %s, %s\n",
|
||||
cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_EMPHASIS),
|
||||
cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_CRC));
|
||||
|
||||
|
|
|
@ -390,6 +390,7 @@ static int video_end(struct saa7146_fh *fh, struct file *file)
|
|||
{
|
||||
struct saa7146_dev *dev = fh->dev;
|
||||
struct saa7146_vv *vv = dev->vv_data;
|
||||
struct saa7146_dmaqueue *q = &vv->video_dmaq;
|
||||
struct saa7146_format *fmt = NULL;
|
||||
unsigned long flags;
|
||||
unsigned int resource;
|
||||
|
@ -428,6 +429,9 @@ static int video_end(struct saa7146_fh *fh, struct file *file)
|
|||
/* shut down all used video dma transfers */
|
||||
saa7146_write(dev, MC1, dmas);
|
||||
|
||||
if (q->curr)
|
||||
saa7146_buffer_finish(dev, q, VIDEOBUF_DONE);
|
||||
|
||||
spin_unlock_irqrestore(&dev->slock, flags);
|
||||
|
||||
vv->video_fh = NULL;
|
||||
|
|
|
@ -1044,7 +1044,7 @@ static void smsdvb_release(struct dvb_frontend *fe)
|
|||
/* do nothing */
|
||||
}
|
||||
|
||||
static struct dvb_frontend_ops smsdvb_fe_ops = {
|
||||
static const struct dvb_frontend_ops smsdvb_fe_ops = {
|
||||
.info = {
|
||||
.name = "Siano Mobile Digital MDTV Receiver",
|
||||
.frequency_min = 44250000,
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/errno.h>
|
||||
|
@ -45,22 +46,9 @@ MODULE_DESCRIPTION("i2c Hauppauge eeprom decoder driver");
|
|||
MODULE_AUTHOR("John Klar");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
static int debug;
|
||||
module_param(debug, int, 0644);
|
||||
MODULE_PARM_DESC(debug, "Debug level (0-1)");
|
||||
|
||||
#define STRM(array, i) \
|
||||
(i < sizeof(array) / sizeof(char *) ? array[i] : "unknown")
|
||||
|
||||
#define tveeprom_info(fmt, arg...) \
|
||||
v4l_printk(KERN_INFO, "tveeprom", c->adapter, c->addr, fmt , ## arg)
|
||||
#define tveeprom_warn(fmt, arg...) \
|
||||
v4l_printk(KERN_WARNING, "tveeprom", c->adapter, c->addr, fmt , ## arg)
|
||||
#define tveeprom_dbg(fmt, arg...) do { \
|
||||
if (debug) \
|
||||
v4l_printk(KERN_DEBUG, "tveeprom", \
|
||||
c->adapter, c->addr, fmt , ## arg); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* The Hauppauge eeprom uses an 8bit field to determine which
|
||||
|
@ -510,19 +498,13 @@ void tveeprom_hauppauge_analog(struct i2c_client *c, struct tveeprom *tvee,
|
|||
len = eeprom_data[i] & 0x07;
|
||||
++i;
|
||||
} else {
|
||||
tveeprom_warn("Encountered bad packet header [%02x]. "
|
||||
"Corrupt or not a Hauppauge eeprom.\n",
|
||||
pr_warn("Encountered bad packet header [%02x]. Corrupt or not a Hauppauge eeprom.\n",
|
||||
eeprom_data[i]);
|
||||
return;
|
||||
}
|
||||
|
||||
if (debug) {
|
||||
tveeprom_info("Tag [%02x] + %d bytes:",
|
||||
eeprom_data[i], len - 1);
|
||||
for (j = 1; j < len; j++)
|
||||
printk(KERN_CONT " %02x", eeprom_data[i + j]);
|
||||
printk(KERN_CONT "\n");
|
||||
}
|
||||
pr_debug("Tag [%02x] + %d bytes: %*ph\n",
|
||||
eeprom_data[i], len - 1, len, &eeprom_data[i]);
|
||||
|
||||
/* process by tag */
|
||||
tag = eeprom_data[i];
|
||||
|
@ -662,14 +644,14 @@ void tveeprom_hauppauge_analog(struct i2c_client *c, struct tveeprom *tvee,
|
|||
/* case 0x12: tag 'InfoBits' */
|
||||
|
||||
default:
|
||||
tveeprom_dbg("Not sure what to do with tag [%02x]\n",
|
||||
pr_debug("Not sure what to do with tag [%02x]\n",
|
||||
tag);
|
||||
/* dump the rest of the packet? */
|
||||
}
|
||||
}
|
||||
|
||||
if (!done) {
|
||||
tveeprom_warn("Ran out of data!\n");
|
||||
pr_warn("Ran out of data!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -682,8 +664,8 @@ void tveeprom_hauppauge_analog(struct i2c_client *c, struct tveeprom *tvee,
|
|||
}
|
||||
|
||||
if (hasRadioTuner(tuner1) && !tvee->has_radio) {
|
||||
tveeprom_info("The eeprom says no radio is present, but the tuner type\n");
|
||||
tveeprom_info("indicates otherwise. I will assume that radio is present.\n");
|
||||
pr_info("The eeprom says no radio is present, but the tuner type\n");
|
||||
pr_info("indicates otherwise. I will assume that radio is present.\n");
|
||||
tvee->has_radio = 1;
|
||||
}
|
||||
|
||||
|
@ -718,46 +700,46 @@ void tveeprom_hauppauge_analog(struct i2c_client *c, struct tveeprom *tvee,
|
|||
}
|
||||
}
|
||||
|
||||
tveeprom_info("Hauppauge model %d, rev %s, serial# %u\n",
|
||||
pr_info("Hauppauge model %d, rev %s, serial# %u\n",
|
||||
tvee->model, tvee->rev_str, tvee->serial_number);
|
||||
if (tvee->has_MAC_address == 1)
|
||||
tveeprom_info("MAC address is %pM\n", tvee->MAC_address);
|
||||
tveeprom_info("tuner model is %s (idx %d, type %d)\n",
|
||||
pr_info("MAC address is %pM\n", tvee->MAC_address);
|
||||
pr_info("tuner model is %s (idx %d, type %d)\n",
|
||||
t_name1, tuner1, tvee->tuner_type);
|
||||
tveeprom_info("TV standards%s%s%s%s%s%s%s%s (eeprom 0x%02x)\n",
|
||||
pr_info("TV standards%s%s%s%s%s%s%s%s (eeprom 0x%02x)\n",
|
||||
t_fmt_name1[0], t_fmt_name1[1], t_fmt_name1[2],
|
||||
t_fmt_name1[3], t_fmt_name1[4], t_fmt_name1[5],
|
||||
t_fmt_name1[6], t_fmt_name1[7], t_format1);
|
||||
if (tuner2)
|
||||
tveeprom_info("second tuner model is %s (idx %d, type %d)\n",
|
||||
pr_info("second tuner model is %s (idx %d, type %d)\n",
|
||||
t_name2, tuner2, tvee->tuner2_type);
|
||||
if (t_format2)
|
||||
tveeprom_info("TV standards%s%s%s%s%s%s%s%s (eeprom 0x%02x)\n",
|
||||
pr_info("TV standards%s%s%s%s%s%s%s%s (eeprom 0x%02x)\n",
|
||||
t_fmt_name2[0], t_fmt_name2[1], t_fmt_name2[2],
|
||||
t_fmt_name2[3], t_fmt_name2[4], t_fmt_name2[5],
|
||||
t_fmt_name2[6], t_fmt_name2[7], t_format2);
|
||||
if (audioic < 0) {
|
||||
tveeprom_info("audio processor is unknown (no idx)\n");
|
||||
pr_info("audio processor is unknown (no idx)\n");
|
||||
tvee->audio_processor = TVEEPROM_AUDPROC_OTHER;
|
||||
} else {
|
||||
if (audioic < ARRAY_SIZE(audio_ic))
|
||||
tveeprom_info("audio processor is %s (idx %d)\n",
|
||||
pr_info("audio processor is %s (idx %d)\n",
|
||||
audio_ic[audioic].name, audioic);
|
||||
else
|
||||
tveeprom_info("audio processor is unknown (idx %d)\n",
|
||||
pr_info("audio processor is unknown (idx %d)\n",
|
||||
audioic);
|
||||
}
|
||||
if (tvee->decoder_processor)
|
||||
tveeprom_info("decoder processor is %s (idx %d)\n",
|
||||
pr_info("decoder processor is %s (idx %d)\n",
|
||||
STRM(decoderIC, tvee->decoder_processor),
|
||||
tvee->decoder_processor);
|
||||
if (tvee->has_ir)
|
||||
tveeprom_info("has %sradio, has %sIR receiver, has %sIR transmitter\n",
|
||||
pr_info("has %sradio, has %sIR receiver, has %sIR transmitter\n",
|
||||
tvee->has_radio ? "" : "no ",
|
||||
(tvee->has_ir & 2) ? "" : "no ",
|
||||
(tvee->has_ir & 4) ? "" : "no ");
|
||||
else
|
||||
tveeprom_info("has %sradio\n",
|
||||
pr_info("has %sradio\n",
|
||||
tvee->has_radio ? "" : "no ");
|
||||
}
|
||||
EXPORT_SYMBOL(tveeprom_hauppauge_analog);
|
||||
|
@ -773,26 +755,17 @@ int tveeprom_read(struct i2c_client *c, unsigned char *eedata, int len)
|
|||
buf = 0;
|
||||
err = i2c_master_send(c, &buf, 1);
|
||||
if (err != 1) {
|
||||
tveeprom_info("Huh, no eeprom present (err=%d)?\n", err);
|
||||
pr_info("Huh, no eeprom present (err=%d)?\n", err);
|
||||
return -1;
|
||||
}
|
||||
err = i2c_master_recv(c, eedata, len);
|
||||
if (err != len) {
|
||||
tveeprom_warn("i2c eeprom read error (err=%d)\n", err);
|
||||
pr_warn("i2c eeprom read error (err=%d)\n", err);
|
||||
return -1;
|
||||
}
|
||||
if (debug) {
|
||||
int i;
|
||||
|
||||
tveeprom_info("full 256-byte eeprom dump:\n");
|
||||
for (i = 0; i < len; i++) {
|
||||
if (0 == (i % 16))
|
||||
tveeprom_info("%02x:", i);
|
||||
printk(KERN_CONT " %02x", eedata[i]);
|
||||
if (15 == (i % 16))
|
||||
printk(KERN_CONT "\n");
|
||||
}
|
||||
}
|
||||
print_hex_dump_debug("full 256-byte eeprom dump:", DUMP_PREFIX_NONE,
|
||||
16, 1, eedata, len, true);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(tveeprom_read);
|
||||
|
|
|
@ -117,6 +117,7 @@ void tpg_init(struct tpg_data *tpg, unsigned w, unsigned h)
|
|||
tpg_s_fourcc(tpg, V4L2_PIX_FMT_RGB24);
|
||||
tpg->colorspace = V4L2_COLORSPACE_SRGB;
|
||||
tpg->perc_fill = 100;
|
||||
tpg->hsv_enc = V4L2_HSV_ENC_180;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(tpg_init);
|
||||
|
||||
|
@ -234,16 +235,18 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
|
|||
case V4L2_PIX_FMT_XBGR32:
|
||||
case V4L2_PIX_FMT_ARGB32:
|
||||
case V4L2_PIX_FMT_ABGR32:
|
||||
tpg->color_enc = TGP_COLOR_ENC_RGB;
|
||||
break;
|
||||
case V4L2_PIX_FMT_GREY:
|
||||
case V4L2_PIX_FMT_Y16:
|
||||
case V4L2_PIX_FMT_Y16_BE:
|
||||
tpg->is_yuv = false;
|
||||
tpg->color_enc = TGP_COLOR_ENC_LUMA;
|
||||
break;
|
||||
case V4L2_PIX_FMT_YUV444:
|
||||
case V4L2_PIX_FMT_YUV555:
|
||||
case V4L2_PIX_FMT_YUV565:
|
||||
case V4L2_PIX_FMT_YUV32:
|
||||
tpg->is_yuv = true;
|
||||
tpg->color_enc = TGP_COLOR_ENC_YCBCR;
|
||||
break;
|
||||
case V4L2_PIX_FMT_YUV420M:
|
||||
case V4L2_PIX_FMT_YVU420M:
|
||||
|
@ -256,7 +259,7 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
|
|||
tpg->hdownsampling[1] = 2;
|
||||
tpg->hdownsampling[2] = 2;
|
||||
tpg->planes = 3;
|
||||
tpg->is_yuv = true;
|
||||
tpg->color_enc = TGP_COLOR_ENC_YCBCR;
|
||||
break;
|
||||
case V4L2_PIX_FMT_YUV422M:
|
||||
case V4L2_PIX_FMT_YVU422M:
|
||||
|
@ -268,7 +271,7 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
|
|||
tpg->hdownsampling[1] = 2;
|
||||
tpg->hdownsampling[2] = 2;
|
||||
tpg->planes = 3;
|
||||
tpg->is_yuv = true;
|
||||
tpg->color_enc = TGP_COLOR_ENC_YCBCR;
|
||||
break;
|
||||
case V4L2_PIX_FMT_NV16M:
|
||||
case V4L2_PIX_FMT_NV61M:
|
||||
|
@ -280,7 +283,7 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
|
|||
tpg->hdownsampling[1] = 1;
|
||||
tpg->hmask[1] = ~1;
|
||||
tpg->planes = 2;
|
||||
tpg->is_yuv = true;
|
||||
tpg->color_enc = TGP_COLOR_ENC_YCBCR;
|
||||
break;
|
||||
case V4L2_PIX_FMT_NV12M:
|
||||
case V4L2_PIX_FMT_NV21M:
|
||||
|
@ -292,7 +295,7 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
|
|||
tpg->hdownsampling[1] = 1;
|
||||
tpg->hmask[1] = ~1;
|
||||
tpg->planes = 2;
|
||||
tpg->is_yuv = true;
|
||||
tpg->color_enc = TGP_COLOR_ENC_YCBCR;
|
||||
break;
|
||||
case V4L2_PIX_FMT_YUV444M:
|
||||
case V4L2_PIX_FMT_YVU444M:
|
||||
|
@ -302,21 +305,25 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
|
|||
tpg->vdownsampling[2] = 1;
|
||||
tpg->hdownsampling[1] = 1;
|
||||
tpg->hdownsampling[2] = 1;
|
||||
tpg->is_yuv = true;
|
||||
tpg->color_enc = TGP_COLOR_ENC_YCBCR;
|
||||
break;
|
||||
case V4L2_PIX_FMT_NV24:
|
||||
case V4L2_PIX_FMT_NV42:
|
||||
tpg->vdownsampling[1] = 1;
|
||||
tpg->hdownsampling[1] = 1;
|
||||
tpg->planes = 2;
|
||||
tpg->is_yuv = true;
|
||||
tpg->color_enc = TGP_COLOR_ENC_YCBCR;
|
||||
break;
|
||||
case V4L2_PIX_FMT_YUYV:
|
||||
case V4L2_PIX_FMT_UYVY:
|
||||
case V4L2_PIX_FMT_YVYU:
|
||||
case V4L2_PIX_FMT_VYUY:
|
||||
tpg->hmask[0] = ~1;
|
||||
tpg->is_yuv = true;
|
||||
tpg->color_enc = TGP_COLOR_ENC_YCBCR;
|
||||
break;
|
||||
case V4L2_PIX_FMT_HSV24:
|
||||
case V4L2_PIX_FMT_HSV32:
|
||||
tpg->color_enc = TGP_COLOR_ENC_HSV;
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
|
@ -351,6 +358,7 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
|
|||
break;
|
||||
case V4L2_PIX_FMT_RGB24:
|
||||
case V4L2_PIX_FMT_BGR24:
|
||||
case V4L2_PIX_FMT_HSV24:
|
||||
tpg->twopixelsize[0] = 2 * 3;
|
||||
break;
|
||||
case V4L2_PIX_FMT_BGR666:
|
||||
|
@ -361,6 +369,7 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
|
|||
case V4L2_PIX_FMT_ARGB32:
|
||||
case V4L2_PIX_FMT_ABGR32:
|
||||
case V4L2_PIX_FMT_YUV32:
|
||||
case V4L2_PIX_FMT_HSV32:
|
||||
tpg->twopixelsize[0] = 2 * 4;
|
||||
break;
|
||||
case V4L2_PIX_FMT_NV12:
|
||||
|
@ -490,6 +499,71 @@ static inline int linear_to_rec709(int v)
|
|||
return tpg_linear_to_rec709[v];
|
||||
}
|
||||
|
||||
static void color_to_hsv(struct tpg_data *tpg, int r, int g, int b,
|
||||
int *h, int *s, int *v)
|
||||
{
|
||||
int max_rgb, min_rgb, diff_rgb;
|
||||
int aux;
|
||||
int third;
|
||||
int third_size;
|
||||
|
||||
r >>= 4;
|
||||
g >>= 4;
|
||||
b >>= 4;
|
||||
|
||||
/* Value */
|
||||
max_rgb = max3(r, g, b);
|
||||
*v = max_rgb;
|
||||
if (!max_rgb) {
|
||||
*h = 0;
|
||||
*s = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Saturation */
|
||||
min_rgb = min3(r, g, b);
|
||||
diff_rgb = max_rgb - min_rgb;
|
||||
aux = 255 * diff_rgb;
|
||||
aux += max_rgb / 2;
|
||||
aux /= max_rgb;
|
||||
*s = aux;
|
||||
if (!aux) {
|
||||
*h = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
third_size = (tpg->real_hsv_enc == V4L2_HSV_ENC_180) ? 60 : 85;
|
||||
|
||||
/* Hue */
|
||||
if (max_rgb == r) {
|
||||
aux = g - b;
|
||||
third = 0;
|
||||
} else if (max_rgb == g) {
|
||||
aux = b - r;
|
||||
third = third_size;
|
||||
} else {
|
||||
aux = r - g;
|
||||
third = third_size * 2;
|
||||
}
|
||||
|
||||
aux *= third_size / 2;
|
||||
aux += diff_rgb / 2;
|
||||
aux /= diff_rgb;
|
||||
aux += third;
|
||||
|
||||
/* Clamp Hue */
|
||||
if (tpg->real_hsv_enc == V4L2_HSV_ENC_180) {
|
||||
if (aux < 0)
|
||||
aux += 180;
|
||||
else if (aux > 180)
|
||||
aux -= 180;
|
||||
} else {
|
||||
aux = aux & 0xff;
|
||||
}
|
||||
|
||||
*h = aux;
|
||||
}
|
||||
|
||||
static void rgb2ycbcr(const int m[3][3], int r, int g, int b,
|
||||
int y_offset, int *y, int *cb, int *cr)
|
||||
{
|
||||
|
@ -729,6 +803,8 @@ static void precalculate_color(struct tpg_data *tpg, int k)
|
|||
int r = tpg_colors[col].r;
|
||||
int g = tpg_colors[col].g;
|
||||
int b = tpg_colors[col].b;
|
||||
int y, cb, cr;
|
||||
bool ycbcr_valid = false;
|
||||
|
||||
if (k == TPG_COLOR_TEXTBG) {
|
||||
col = tpg_get_textbg_color(tpg);
|
||||
|
@ -759,9 +835,9 @@ static void precalculate_color(struct tpg_data *tpg, int k)
|
|||
g <<= 4;
|
||||
b <<= 4;
|
||||
}
|
||||
if (tpg->qual == TPG_QUAL_GRAY || tpg->fourcc == V4L2_PIX_FMT_GREY ||
|
||||
tpg->fourcc == V4L2_PIX_FMT_Y16 ||
|
||||
tpg->fourcc == V4L2_PIX_FMT_Y16_BE) {
|
||||
|
||||
if (tpg->qual == TPG_QUAL_GRAY ||
|
||||
tpg->color_enc == TGP_COLOR_ENC_LUMA) {
|
||||
/* Rec. 709 Luma function */
|
||||
/* (0.2126, 0.7152, 0.0722) * (255 * 256) */
|
||||
r = g = b = (13879 * r + 46688 * g + 4713 * b) >> 16;
|
||||
|
@ -775,7 +851,8 @@ static void precalculate_color(struct tpg_data *tpg, int k)
|
|||
* Remember that r, g and b are still in the 0 - 0xff0 range.
|
||||
*/
|
||||
if (tpg->real_rgb_range == V4L2_DV_RGB_RANGE_LIMITED &&
|
||||
tpg->rgb_range == V4L2_DV_RGB_RANGE_FULL && !tpg->is_yuv) {
|
||||
tpg->rgb_range == V4L2_DV_RGB_RANGE_FULL &&
|
||||
tpg->color_enc == TGP_COLOR_ENC_RGB) {
|
||||
/*
|
||||
* Convert from full range (which is what r, g and b are)
|
||||
* to limited range (which is the 'real' RGB range), which
|
||||
|
@ -785,7 +862,9 @@ static void precalculate_color(struct tpg_data *tpg, int k)
|
|||
g = (g * 219) / 255 + (16 << 4);
|
||||
b = (b * 219) / 255 + (16 << 4);
|
||||
} else if (tpg->real_rgb_range != V4L2_DV_RGB_RANGE_LIMITED &&
|
||||
tpg->rgb_range == V4L2_DV_RGB_RANGE_LIMITED && !tpg->is_yuv) {
|
||||
tpg->rgb_range == V4L2_DV_RGB_RANGE_LIMITED &&
|
||||
tpg->color_enc == TGP_COLOR_ENC_RGB) {
|
||||
|
||||
/*
|
||||
* Clamp r, g and b to the limited range and convert to full
|
||||
* range since that's what we deliver.
|
||||
|
@ -798,10 +877,10 @@ static void precalculate_color(struct tpg_data *tpg, int k)
|
|||
b = (b - (16 << 4)) * 255 / 219;
|
||||
}
|
||||
|
||||
if (tpg->brightness != 128 || tpg->contrast != 128 ||
|
||||
tpg->saturation != 128 || tpg->hue) {
|
||||
if ((tpg->brightness != 128 || tpg->contrast != 128 ||
|
||||
tpg->saturation != 128 || tpg->hue) &&
|
||||
tpg->color_enc != TGP_COLOR_ENC_LUMA) {
|
||||
/* Implement these operations */
|
||||
int y, cb, cr;
|
||||
int tmp_cb, tmp_cr;
|
||||
|
||||
/* First convert to YCbCr */
|
||||
|
@ -818,29 +897,45 @@ static void precalculate_color(struct tpg_data *tpg, int k)
|
|||
|
||||
cb = (128 << 4) + (tmp_cb * tpg->contrast * tpg->saturation) / (128 * 128);
|
||||
cr = (128 << 4) + (tmp_cr * tpg->contrast * tpg->saturation) / (128 * 128);
|
||||
if (tpg->is_yuv) {
|
||||
tpg->colors[k][0] = clamp(y >> 4, 1, 254);
|
||||
tpg->colors[k][1] = clamp(cb >> 4, 1, 254);
|
||||
tpg->colors[k][2] = clamp(cr >> 4, 1, 254);
|
||||
return;
|
||||
}
|
||||
ycbcr_to_color(tpg, y, cb, cr, &r, &g, &b);
|
||||
if (tpg->color_enc == TGP_COLOR_ENC_YCBCR)
|
||||
ycbcr_valid = true;
|
||||
else
|
||||
ycbcr_to_color(tpg, y, cb, cr, &r, &g, &b);
|
||||
} else if ((tpg->brightness != 128 || tpg->contrast != 128) &&
|
||||
tpg->color_enc == TGP_COLOR_ENC_LUMA) {
|
||||
r = (16 << 4) + ((r - (16 << 4)) * tpg->contrast) / 128;
|
||||
r += (tpg->brightness << 4) - (128 << 4);
|
||||
}
|
||||
|
||||
if (tpg->is_yuv) {
|
||||
switch (tpg->color_enc) {
|
||||
case TGP_COLOR_ENC_HSV:
|
||||
{
|
||||
int h, s, v;
|
||||
|
||||
color_to_hsv(tpg, r, g, b, &h, &s, &v);
|
||||
tpg->colors[k][0] = h;
|
||||
tpg->colors[k][1] = s;
|
||||
tpg->colors[k][2] = v;
|
||||
break;
|
||||
}
|
||||
case TGP_COLOR_ENC_YCBCR:
|
||||
{
|
||||
/* Convert to YCbCr */
|
||||
int y, cb, cr;
|
||||
|
||||
color_to_ycbcr(tpg, r, g, b, &y, &cb, &cr);
|
||||
if (!ycbcr_valid)
|
||||
color_to_ycbcr(tpg, r, g, b, &y, &cb, &cr);
|
||||
|
||||
y >>= 4;
|
||||
cb >>= 4;
|
||||
cr >>= 4;
|
||||
if (tpg->real_quantization == V4L2_QUANTIZATION_LIM_RANGE) {
|
||||
y = clamp(y, 16 << 4, 235 << 4);
|
||||
cb = clamp(cb, 16 << 4, 240 << 4);
|
||||
cr = clamp(cr, 16 << 4, 240 << 4);
|
||||
y = clamp(y, 16, 235);
|
||||
cb = clamp(cb, 16, 240);
|
||||
cr = clamp(cr, 16, 240);
|
||||
} else {
|
||||
y = clamp(y, 1, 254);
|
||||
cb = clamp(cb, 1, 254);
|
||||
cr = clamp(cr, 1, 254);
|
||||
}
|
||||
y = clamp(y >> 4, 1, 254);
|
||||
cb = clamp(cb >> 4, 1, 254);
|
||||
cr = clamp(cr >> 4, 1, 254);
|
||||
switch (tpg->fourcc) {
|
||||
case V4L2_PIX_FMT_YUV444:
|
||||
y >>= 4;
|
||||
|
@ -861,7 +956,15 @@ static void precalculate_color(struct tpg_data *tpg, int k)
|
|||
tpg->colors[k][0] = y;
|
||||
tpg->colors[k][1] = cb;
|
||||
tpg->colors[k][2] = cr;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
case TGP_COLOR_ENC_LUMA:
|
||||
{
|
||||
tpg->colors[k][0] = r >> 4;
|
||||
break;
|
||||
}
|
||||
case TGP_COLOR_ENC_RGB:
|
||||
{
|
||||
if (tpg->real_quantization == V4L2_QUANTIZATION_LIM_RANGE) {
|
||||
r = (r * 219) / 255 + (16 << 4);
|
||||
g = (g * 219) / 255 + (16 << 4);
|
||||
|
@ -911,6 +1014,8 @@ static void precalculate_color(struct tpg_data *tpg, int k)
|
|||
tpg->colors[k][0] = r;
|
||||
tpg->colors[k][1] = g;
|
||||
tpg->colors[k][2] = b;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -928,7 +1033,7 @@ static void gen_twopix(struct tpg_data *tpg,
|
|||
{
|
||||
unsigned offset = odd * tpg->twopixelsize[0] / 2;
|
||||
u8 alpha = tpg->alpha_component;
|
||||
u8 r_y, g_u, b_v;
|
||||
u8 r_y_h, g_u_s, b_v;
|
||||
|
||||
if (tpg->alpha_red_only && color != TPG_COLOR_CSC_RED &&
|
||||
color != TPG_COLOR_100_RED &&
|
||||
|
@ -936,161 +1041,161 @@ static void gen_twopix(struct tpg_data *tpg,
|
|||
alpha = 0;
|
||||
if (color == TPG_COLOR_RANDOM)
|
||||
precalculate_color(tpg, color);
|
||||
r_y = tpg->colors[color][0]; /* R or precalculated Y */
|
||||
g_u = tpg->colors[color][1]; /* G or precalculated U */
|
||||
r_y_h = tpg->colors[color][0]; /* R or precalculated Y, H */
|
||||
g_u_s = tpg->colors[color][1]; /* G or precalculated U, V */
|
||||
b_v = tpg->colors[color][2]; /* B or precalculated V */
|
||||
|
||||
switch (tpg->fourcc) {
|
||||
case V4L2_PIX_FMT_GREY:
|
||||
buf[0][offset] = r_y;
|
||||
buf[0][offset] = r_y_h;
|
||||
break;
|
||||
case V4L2_PIX_FMT_Y16:
|
||||
/*
|
||||
* Ideally both bytes should be set to r_y, but then you won't
|
||||
* Ideally both bytes should be set to r_y_h, but then you won't
|
||||
* be able to detect endian problems. So keep it 0 except for
|
||||
* the corner case where r_y is 0xff so white really will be
|
||||
* the corner case where r_y_h is 0xff so white really will be
|
||||
* white (0xffff).
|
||||
*/
|
||||
buf[0][offset] = r_y == 0xff ? r_y : 0;
|
||||
buf[0][offset+1] = r_y;
|
||||
buf[0][offset] = r_y_h == 0xff ? r_y_h : 0;
|
||||
buf[0][offset+1] = r_y_h;
|
||||
break;
|
||||
case V4L2_PIX_FMT_Y16_BE:
|
||||
/* See comment for V4L2_PIX_FMT_Y16 above */
|
||||
buf[0][offset] = r_y;
|
||||
buf[0][offset+1] = r_y == 0xff ? r_y : 0;
|
||||
buf[0][offset] = r_y_h;
|
||||
buf[0][offset+1] = r_y_h == 0xff ? r_y_h : 0;
|
||||
break;
|
||||
case V4L2_PIX_FMT_YUV422M:
|
||||
case V4L2_PIX_FMT_YUV422P:
|
||||
case V4L2_PIX_FMT_YUV420:
|
||||
case V4L2_PIX_FMT_YUV420M:
|
||||
buf[0][offset] = r_y;
|
||||
buf[0][offset] = r_y_h;
|
||||
if (odd) {
|
||||
buf[1][0] = (buf[1][0] + g_u) / 2;
|
||||
buf[1][0] = (buf[1][0] + g_u_s) / 2;
|
||||
buf[2][0] = (buf[2][0] + b_v) / 2;
|
||||
buf[1][1] = buf[1][0];
|
||||
buf[2][1] = buf[2][0];
|
||||
break;
|
||||
}
|
||||
buf[1][0] = g_u;
|
||||
buf[1][0] = g_u_s;
|
||||
buf[2][0] = b_v;
|
||||
break;
|
||||
case V4L2_PIX_FMT_YVU422M:
|
||||
case V4L2_PIX_FMT_YVU420:
|
||||
case V4L2_PIX_FMT_YVU420M:
|
||||
buf[0][offset] = r_y;
|
||||
buf[0][offset] = r_y_h;
|
||||
if (odd) {
|
||||
buf[1][0] = (buf[1][0] + b_v) / 2;
|
||||
buf[2][0] = (buf[2][0] + g_u) / 2;
|
||||
buf[2][0] = (buf[2][0] + g_u_s) / 2;
|
||||
buf[1][1] = buf[1][0];
|
||||
buf[2][1] = buf[2][0];
|
||||
break;
|
||||
}
|
||||
buf[1][0] = b_v;
|
||||
buf[2][0] = g_u;
|
||||
buf[2][0] = g_u_s;
|
||||
break;
|
||||
|
||||
case V4L2_PIX_FMT_NV12:
|
||||
case V4L2_PIX_FMT_NV12M:
|
||||
case V4L2_PIX_FMT_NV16:
|
||||
case V4L2_PIX_FMT_NV16M:
|
||||
buf[0][offset] = r_y;
|
||||
buf[0][offset] = r_y_h;
|
||||
if (odd) {
|
||||
buf[1][0] = (buf[1][0] + g_u) / 2;
|
||||
buf[1][0] = (buf[1][0] + g_u_s) / 2;
|
||||
buf[1][1] = (buf[1][1] + b_v) / 2;
|
||||
break;
|
||||
}
|
||||
buf[1][0] = g_u;
|
||||
buf[1][0] = g_u_s;
|
||||
buf[1][1] = b_v;
|
||||
break;
|
||||
case V4L2_PIX_FMT_NV21:
|
||||
case V4L2_PIX_FMT_NV21M:
|
||||
case V4L2_PIX_FMT_NV61:
|
||||
case V4L2_PIX_FMT_NV61M:
|
||||
buf[0][offset] = r_y;
|
||||
buf[0][offset] = r_y_h;
|
||||
if (odd) {
|
||||
buf[1][0] = (buf[1][0] + b_v) / 2;
|
||||
buf[1][1] = (buf[1][1] + g_u) / 2;
|
||||
buf[1][1] = (buf[1][1] + g_u_s) / 2;
|
||||
break;
|
||||
}
|
||||
buf[1][0] = b_v;
|
||||
buf[1][1] = g_u;
|
||||
buf[1][1] = g_u_s;
|
||||
break;
|
||||
|
||||
case V4L2_PIX_FMT_YUV444M:
|
||||
buf[0][offset] = r_y;
|
||||
buf[1][offset] = g_u;
|
||||
buf[0][offset] = r_y_h;
|
||||
buf[1][offset] = g_u_s;
|
||||
buf[2][offset] = b_v;
|
||||
break;
|
||||
|
||||
case V4L2_PIX_FMT_YVU444M:
|
||||
buf[0][offset] = r_y;
|
||||
buf[0][offset] = r_y_h;
|
||||
buf[1][offset] = b_v;
|
||||
buf[2][offset] = g_u;
|
||||
buf[2][offset] = g_u_s;
|
||||
break;
|
||||
|
||||
case V4L2_PIX_FMT_NV24:
|
||||
buf[0][offset] = r_y;
|
||||
buf[1][2 * offset] = g_u;
|
||||
buf[0][offset] = r_y_h;
|
||||
buf[1][2 * offset] = g_u_s;
|
||||
buf[1][2 * offset + 1] = b_v;
|
||||
break;
|
||||
|
||||
case V4L2_PIX_FMT_NV42:
|
||||
buf[0][offset] = r_y;
|
||||
buf[0][offset] = r_y_h;
|
||||
buf[1][2 * offset] = b_v;
|
||||
buf[1][2 * offset + 1] = g_u;
|
||||
buf[1][2 * offset + 1] = g_u_s;
|
||||
break;
|
||||
|
||||
case V4L2_PIX_FMT_YUYV:
|
||||
buf[0][offset] = r_y;
|
||||
buf[0][offset] = r_y_h;
|
||||
if (odd) {
|
||||
buf[0][1] = (buf[0][1] + g_u) / 2;
|
||||
buf[0][1] = (buf[0][1] + g_u_s) / 2;
|
||||
buf[0][3] = (buf[0][3] + b_v) / 2;
|
||||
break;
|
||||
}
|
||||
buf[0][1] = g_u;
|
||||
buf[0][1] = g_u_s;
|
||||
buf[0][3] = b_v;
|
||||
break;
|
||||
case V4L2_PIX_FMT_UYVY:
|
||||
buf[0][offset + 1] = r_y;
|
||||
buf[0][offset + 1] = r_y_h;
|
||||
if (odd) {
|
||||
buf[0][0] = (buf[0][0] + g_u) / 2;
|
||||
buf[0][0] = (buf[0][0] + g_u_s) / 2;
|
||||
buf[0][2] = (buf[0][2] + b_v) / 2;
|
||||
break;
|
||||
}
|
||||
buf[0][0] = g_u;
|
||||
buf[0][0] = g_u_s;
|
||||
buf[0][2] = b_v;
|
||||
break;
|
||||
case V4L2_PIX_FMT_YVYU:
|
||||
buf[0][offset] = r_y;
|
||||
buf[0][offset] = r_y_h;
|
||||
if (odd) {
|
||||
buf[0][1] = (buf[0][1] + b_v) / 2;
|
||||
buf[0][3] = (buf[0][3] + g_u) / 2;
|
||||
buf[0][3] = (buf[0][3] + g_u_s) / 2;
|
||||
break;
|
||||
}
|
||||
buf[0][1] = b_v;
|
||||
buf[0][3] = g_u;
|
||||
buf[0][3] = g_u_s;
|
||||
break;
|
||||
case V4L2_PIX_FMT_VYUY:
|
||||
buf[0][offset + 1] = r_y;
|
||||
buf[0][offset + 1] = r_y_h;
|
||||
if (odd) {
|
||||
buf[0][0] = (buf[0][0] + b_v) / 2;
|
||||
buf[0][2] = (buf[0][2] + g_u) / 2;
|
||||
buf[0][2] = (buf[0][2] + g_u_s) / 2;
|
||||
break;
|
||||
}
|
||||
buf[0][0] = b_v;
|
||||
buf[0][2] = g_u;
|
||||
buf[0][2] = g_u_s;
|
||||
break;
|
||||
case V4L2_PIX_FMT_RGB332:
|
||||
buf[0][offset] = (r_y << 5) | (g_u << 2) | b_v;
|
||||
buf[0][offset] = (r_y_h << 5) | (g_u_s << 2) | b_v;
|
||||
break;
|
||||
case V4L2_PIX_FMT_YUV565:
|
||||
case V4L2_PIX_FMT_RGB565:
|
||||
buf[0][offset] = (g_u << 5) | b_v;
|
||||
buf[0][offset + 1] = (r_y << 3) | (g_u >> 3);
|
||||
buf[0][offset] = (g_u_s << 5) | b_v;
|
||||
buf[0][offset + 1] = (r_y_h << 3) | (g_u_s >> 3);
|
||||
break;
|
||||
case V4L2_PIX_FMT_RGB565X:
|
||||
buf[0][offset] = (r_y << 3) | (g_u >> 3);
|
||||
buf[0][offset + 1] = (g_u << 5) | b_v;
|
||||
buf[0][offset] = (r_y_h << 3) | (g_u_s >> 3);
|
||||
buf[0][offset + 1] = (g_u_s << 5) | b_v;
|
||||
break;
|
||||
case V4L2_PIX_FMT_RGB444:
|
||||
case V4L2_PIX_FMT_XRGB444:
|
||||
|
@ -1098,8 +1203,8 @@ static void gen_twopix(struct tpg_data *tpg,
|
|||
/* fall through */
|
||||
case V4L2_PIX_FMT_YUV444:
|
||||
case V4L2_PIX_FMT_ARGB444:
|
||||
buf[0][offset] = (g_u << 4) | b_v;
|
||||
buf[0][offset + 1] = (alpha & 0xf0) | r_y;
|
||||
buf[0][offset] = (g_u_s << 4) | b_v;
|
||||
buf[0][offset + 1] = (alpha & 0xf0) | r_y_h;
|
||||
break;
|
||||
case V4L2_PIX_FMT_RGB555:
|
||||
case V4L2_PIX_FMT_XRGB555:
|
||||
|
@ -1107,42 +1212,45 @@ static void gen_twopix(struct tpg_data *tpg,
|
|||
/* fall through */
|
||||
case V4L2_PIX_FMT_YUV555:
|
||||
case V4L2_PIX_FMT_ARGB555:
|
||||
buf[0][offset] = (g_u << 5) | b_v;
|
||||
buf[0][offset + 1] = (alpha & 0x80) | (r_y << 2) | (g_u >> 3);
|
||||
buf[0][offset] = (g_u_s << 5) | b_v;
|
||||
buf[0][offset + 1] = (alpha & 0x80) | (r_y_h << 2)
|
||||
| (g_u_s >> 3);
|
||||
break;
|
||||
case V4L2_PIX_FMT_RGB555X:
|
||||
case V4L2_PIX_FMT_XRGB555X:
|
||||
alpha = 0;
|
||||
/* fall through */
|
||||
case V4L2_PIX_FMT_ARGB555X:
|
||||
buf[0][offset] = (alpha & 0x80) | (r_y << 2) | (g_u >> 3);
|
||||
buf[0][offset + 1] = (g_u << 5) | b_v;
|
||||
buf[0][offset] = (alpha & 0x80) | (r_y_h << 2) | (g_u_s >> 3);
|
||||
buf[0][offset + 1] = (g_u_s << 5) | b_v;
|
||||
break;
|
||||
case V4L2_PIX_FMT_RGB24:
|
||||
buf[0][offset] = r_y;
|
||||
buf[0][offset + 1] = g_u;
|
||||
case V4L2_PIX_FMT_HSV24:
|
||||
buf[0][offset] = r_y_h;
|
||||
buf[0][offset + 1] = g_u_s;
|
||||
buf[0][offset + 2] = b_v;
|
||||
break;
|
||||
case V4L2_PIX_FMT_BGR24:
|
||||
buf[0][offset] = b_v;
|
||||
buf[0][offset + 1] = g_u;
|
||||
buf[0][offset + 2] = r_y;
|
||||
buf[0][offset + 1] = g_u_s;
|
||||
buf[0][offset + 2] = r_y_h;
|
||||
break;
|
||||
case V4L2_PIX_FMT_BGR666:
|
||||
buf[0][offset] = (b_v << 2) | (g_u >> 4);
|
||||
buf[0][offset + 1] = (g_u << 4) | (r_y >> 2);
|
||||
buf[0][offset + 2] = r_y << 6;
|
||||
buf[0][offset] = (b_v << 2) | (g_u_s >> 4);
|
||||
buf[0][offset + 1] = (g_u_s << 4) | (r_y_h >> 2);
|
||||
buf[0][offset + 2] = r_y_h << 6;
|
||||
buf[0][offset + 3] = 0;
|
||||
break;
|
||||
case V4L2_PIX_FMT_RGB32:
|
||||
case V4L2_PIX_FMT_XRGB32:
|
||||
case V4L2_PIX_FMT_HSV32:
|
||||
alpha = 0;
|
||||
/* fall through */
|
||||
case V4L2_PIX_FMT_YUV32:
|
||||
case V4L2_PIX_FMT_ARGB32:
|
||||
buf[0][offset] = alpha;
|
||||
buf[0][offset + 1] = r_y;
|
||||
buf[0][offset + 2] = g_u;
|
||||
buf[0][offset + 1] = r_y_h;
|
||||
buf[0][offset + 2] = g_u_s;
|
||||
buf[0][offset + 3] = b_v;
|
||||
break;
|
||||
case V4L2_PIX_FMT_BGR32:
|
||||
|
@ -1151,87 +1259,87 @@ static void gen_twopix(struct tpg_data *tpg,
|
|||
/* fall through */
|
||||
case V4L2_PIX_FMT_ABGR32:
|
||||
buf[0][offset] = b_v;
|
||||
buf[0][offset + 1] = g_u;
|
||||
buf[0][offset + 2] = r_y;
|
||||
buf[0][offset + 1] = g_u_s;
|
||||
buf[0][offset + 2] = r_y_h;
|
||||
buf[0][offset + 3] = alpha;
|
||||
break;
|
||||
case V4L2_PIX_FMT_SBGGR8:
|
||||
buf[0][offset] = odd ? g_u : b_v;
|
||||
buf[1][offset] = odd ? r_y : g_u;
|
||||
buf[0][offset] = odd ? g_u_s : b_v;
|
||||
buf[1][offset] = odd ? r_y_h : g_u_s;
|
||||
break;
|
||||
case V4L2_PIX_FMT_SGBRG8:
|
||||
buf[0][offset] = odd ? b_v : g_u;
|
||||
buf[1][offset] = odd ? g_u : r_y;
|
||||
buf[0][offset] = odd ? b_v : g_u_s;
|
||||
buf[1][offset] = odd ? g_u_s : r_y_h;
|
||||
break;
|
||||
case V4L2_PIX_FMT_SGRBG8:
|
||||
buf[0][offset] = odd ? r_y : g_u;
|
||||
buf[1][offset] = odd ? g_u : b_v;
|
||||
buf[0][offset] = odd ? r_y_h : g_u_s;
|
||||
buf[1][offset] = odd ? g_u_s : b_v;
|
||||
break;
|
||||
case V4L2_PIX_FMT_SRGGB8:
|
||||
buf[0][offset] = odd ? g_u : r_y;
|
||||
buf[1][offset] = odd ? b_v : g_u;
|
||||
buf[0][offset] = odd ? g_u_s : r_y_h;
|
||||
buf[1][offset] = odd ? b_v : g_u_s;
|
||||
break;
|
||||
case V4L2_PIX_FMT_SBGGR10:
|
||||
buf[0][offset] = odd ? g_u << 2 : b_v << 2;
|
||||
buf[0][offset + 1] = odd ? g_u >> 6 : b_v >> 6;
|
||||
buf[1][offset] = odd ? r_y << 2 : g_u << 2;
|
||||
buf[1][offset + 1] = odd ? r_y >> 6 : g_u >> 6;
|
||||
buf[0][offset] = odd ? g_u_s << 2 : b_v << 2;
|
||||
buf[0][offset + 1] = odd ? g_u_s >> 6 : b_v >> 6;
|
||||
buf[1][offset] = odd ? r_y_h << 2 : g_u_s << 2;
|
||||
buf[1][offset + 1] = odd ? r_y_h >> 6 : g_u_s >> 6;
|
||||
buf[0][offset] |= (buf[0][offset] >> 2) & 3;
|
||||
buf[1][offset] |= (buf[1][offset] >> 2) & 3;
|
||||
break;
|
||||
case V4L2_PIX_FMT_SGBRG10:
|
||||
buf[0][offset] = odd ? b_v << 2 : g_u << 2;
|
||||
buf[0][offset + 1] = odd ? b_v >> 6 : g_u >> 6;
|
||||
buf[1][offset] = odd ? g_u << 2 : r_y << 2;
|
||||
buf[1][offset + 1] = odd ? g_u >> 6 : r_y >> 6;
|
||||
buf[0][offset] = odd ? b_v << 2 : g_u_s << 2;
|
||||
buf[0][offset + 1] = odd ? b_v >> 6 : g_u_s >> 6;
|
||||
buf[1][offset] = odd ? g_u_s << 2 : r_y_h << 2;
|
||||
buf[1][offset + 1] = odd ? g_u_s >> 6 : r_y_h >> 6;
|
||||
buf[0][offset] |= (buf[0][offset] >> 2) & 3;
|
||||
buf[1][offset] |= (buf[1][offset] >> 2) & 3;
|
||||
break;
|
||||
case V4L2_PIX_FMT_SGRBG10:
|
||||
buf[0][offset] = odd ? r_y << 2 : g_u << 2;
|
||||
buf[0][offset + 1] = odd ? r_y >> 6 : g_u >> 6;
|
||||
buf[1][offset] = odd ? g_u << 2 : b_v << 2;
|
||||
buf[1][offset + 1] = odd ? g_u >> 6 : b_v >> 6;
|
||||
buf[0][offset] = odd ? r_y_h << 2 : g_u_s << 2;
|
||||
buf[0][offset + 1] = odd ? r_y_h >> 6 : g_u_s >> 6;
|
||||
buf[1][offset] = odd ? g_u_s << 2 : b_v << 2;
|
||||
buf[1][offset + 1] = odd ? g_u_s >> 6 : b_v >> 6;
|
||||
buf[0][offset] |= (buf[0][offset] >> 2) & 3;
|
||||
buf[1][offset] |= (buf[1][offset] >> 2) & 3;
|
||||
break;
|
||||
case V4L2_PIX_FMT_SRGGB10:
|
||||
buf[0][offset] = odd ? g_u << 2 : r_y << 2;
|
||||
buf[0][offset + 1] = odd ? g_u >> 6 : r_y >> 6;
|
||||
buf[1][offset] = odd ? b_v << 2 : g_u << 2;
|
||||
buf[1][offset + 1] = odd ? b_v >> 6 : g_u >> 6;
|
||||
buf[0][offset] = odd ? g_u_s << 2 : r_y_h << 2;
|
||||
buf[0][offset + 1] = odd ? g_u_s >> 6 : r_y_h >> 6;
|
||||
buf[1][offset] = odd ? b_v << 2 : g_u_s << 2;
|
||||
buf[1][offset + 1] = odd ? b_v >> 6 : g_u_s >> 6;
|
||||
buf[0][offset] |= (buf[0][offset] >> 2) & 3;
|
||||
buf[1][offset] |= (buf[1][offset] >> 2) & 3;
|
||||
break;
|
||||
case V4L2_PIX_FMT_SBGGR12:
|
||||
buf[0][offset] = odd ? g_u << 4 : b_v << 4;
|
||||
buf[0][offset + 1] = odd ? g_u >> 4 : b_v >> 4;
|
||||
buf[1][offset] = odd ? r_y << 4 : g_u << 4;
|
||||
buf[1][offset + 1] = odd ? r_y >> 4 : g_u >> 4;
|
||||
buf[0][offset] = odd ? g_u_s << 4 : b_v << 4;
|
||||
buf[0][offset + 1] = odd ? g_u_s >> 4 : b_v >> 4;
|
||||
buf[1][offset] = odd ? r_y_h << 4 : g_u_s << 4;
|
||||
buf[1][offset + 1] = odd ? r_y_h >> 4 : g_u_s >> 4;
|
||||
buf[0][offset] |= (buf[0][offset] >> 4) & 0xf;
|
||||
buf[1][offset] |= (buf[1][offset] >> 4) & 0xf;
|
||||
break;
|
||||
case V4L2_PIX_FMT_SGBRG12:
|
||||
buf[0][offset] = odd ? b_v << 4 : g_u << 4;
|
||||
buf[0][offset + 1] = odd ? b_v >> 4 : g_u >> 4;
|
||||
buf[1][offset] = odd ? g_u << 4 : r_y << 4;
|
||||
buf[1][offset + 1] = odd ? g_u >> 4 : r_y >> 4;
|
||||
buf[0][offset] = odd ? b_v << 4 : g_u_s << 4;
|
||||
buf[0][offset + 1] = odd ? b_v >> 4 : g_u_s >> 4;
|
||||
buf[1][offset] = odd ? g_u_s << 4 : r_y_h << 4;
|
||||
buf[1][offset + 1] = odd ? g_u_s >> 4 : r_y_h >> 4;
|
||||
buf[0][offset] |= (buf[0][offset] >> 4) & 0xf;
|
||||
buf[1][offset] |= (buf[1][offset] >> 4) & 0xf;
|
||||
break;
|
||||
case V4L2_PIX_FMT_SGRBG12:
|
||||
buf[0][offset] = odd ? r_y << 4 : g_u << 4;
|
||||
buf[0][offset + 1] = odd ? r_y >> 4 : g_u >> 4;
|
||||
buf[1][offset] = odd ? g_u << 4 : b_v << 4;
|
||||
buf[1][offset + 1] = odd ? g_u >> 4 : b_v >> 4;
|
||||
buf[0][offset] = odd ? r_y_h << 4 : g_u_s << 4;
|
||||
buf[0][offset + 1] = odd ? r_y_h >> 4 : g_u_s >> 4;
|
||||
buf[1][offset] = odd ? g_u_s << 4 : b_v << 4;
|
||||
buf[1][offset + 1] = odd ? g_u_s >> 4 : b_v >> 4;
|
||||
buf[0][offset] |= (buf[0][offset] >> 4) & 0xf;
|
||||
buf[1][offset] |= (buf[1][offset] >> 4) & 0xf;
|
||||
break;
|
||||
case V4L2_PIX_FMT_SRGGB12:
|
||||
buf[0][offset] = odd ? g_u << 4 : r_y << 4;
|
||||
buf[0][offset + 1] = odd ? g_u >> 4 : r_y >> 4;
|
||||
buf[1][offset] = odd ? b_v << 4 : g_u << 4;
|
||||
buf[1][offset + 1] = odd ? b_v >> 4 : g_u >> 4;
|
||||
buf[0][offset] = odd ? g_u_s << 4 : r_y_h << 4;
|
||||
buf[0][offset + 1] = odd ? g_u_s >> 4 : r_y_h >> 4;
|
||||
buf[1][offset] = odd ? b_v << 4 : g_u_s << 4;
|
||||
buf[1][offset + 1] = odd ? b_v >> 4 : g_u_s >> 4;
|
||||
buf[0][offset] |= (buf[0][offset] >> 4) & 0xf;
|
||||
buf[1][offset] |= (buf[1][offset] >> 4) & 0xf;
|
||||
break;
|
||||
|
@ -1828,6 +1936,7 @@ static void tpg_recalc(struct tpg_data *tpg)
|
|||
tpg->recalc_lines = true;
|
||||
tpg->real_xfer_func = tpg->xfer_func;
|
||||
tpg->real_ycbcr_enc = tpg->ycbcr_enc;
|
||||
tpg->real_hsv_enc = tpg->hsv_enc;
|
||||
tpg->real_quantization = tpg->quantization;
|
||||
|
||||
if (tpg->xfer_func == V4L2_XFER_FUNC_DEFAULT)
|
||||
|
@ -1840,7 +1949,8 @@ static void tpg_recalc(struct tpg_data *tpg)
|
|||
|
||||
if (tpg->quantization == V4L2_QUANTIZATION_DEFAULT)
|
||||
tpg->real_quantization =
|
||||
V4L2_MAP_QUANTIZATION_DEFAULT(!tpg->is_yuv,
|
||||
V4L2_MAP_QUANTIZATION_DEFAULT(
|
||||
tpg->color_enc != TGP_COLOR_ENC_YCBCR,
|
||||
tpg->colorspace, tpg->real_ycbcr_enc);
|
||||
|
||||
tpg_precalculate_colors(tpg);
|
||||
|
@ -1887,11 +1997,28 @@ static int tpg_pattern_avg(const struct tpg_data *tpg,
|
|||
return -1;
|
||||
}
|
||||
|
||||
static const char *tpg_color_enc_str(enum tgp_color_enc
|
||||
color_enc)
|
||||
{
|
||||
switch (color_enc) {
|
||||
case TGP_COLOR_ENC_HSV:
|
||||
return "HSV";
|
||||
case TGP_COLOR_ENC_YCBCR:
|
||||
return "Y'CbCr";
|
||||
case TGP_COLOR_ENC_LUMA:
|
||||
return "Luma";
|
||||
case TGP_COLOR_ENC_RGB:
|
||||
default:
|
||||
return "R'G'B";
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void tpg_log_status(struct tpg_data *tpg)
|
||||
{
|
||||
pr_info("tpg source WxH: %ux%u (%s)\n",
|
||||
tpg->src_width, tpg->src_height,
|
||||
tpg->is_yuv ? "YCbCr" : "RGB");
|
||||
tpg->src_width, tpg->src_height,
|
||||
tpg_color_enc_str(tpg->color_enc));
|
||||
pr_info("tpg field: %u\n", tpg->field);
|
||||
pr_info("tpg crop: %ux%u@%dx%d\n", tpg->crop.width, tpg->crop.height,
|
||||
tpg->crop.left, tpg->crop.top);
|
||||
|
@ -1900,6 +2027,7 @@ void tpg_log_status(struct tpg_data *tpg)
|
|||
pr_info("tpg colorspace: %d\n", tpg->colorspace);
|
||||
pr_info("tpg transfer function: %d/%d\n", tpg->xfer_func, tpg->real_xfer_func);
|
||||
pr_info("tpg Y'CbCr encoding: %d/%d\n", tpg->ycbcr_enc, tpg->real_ycbcr_enc);
|
||||
pr_info("tpg HSV encoding: %d/%d\n", tpg->hsv_enc, tpg->real_hsv_enc);
|
||||
pr_info("tpg quantization: %d/%d\n", tpg->quantization, tpg->real_quantization);
|
||||
pr_info("tpg RGB range: %d/%d\n", tpg->rgb_range, tpg->real_rgb_range);
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
config DVB_MAX_ADAPTERS
|
||||
int "maximum number of DVB/ATSC adapters"
|
||||
depends on DVB_CORE
|
||||
default 8
|
||||
default 16
|
||||
range 1 255
|
||||
help
|
||||
Maximum number of DVB/ATSC adapters. Increasing this number
|
||||
|
@ -13,7 +13,7 @@ config DVB_MAX_ADAPTERS
|
|||
if a much lower number of DVB/ATSC adapters is present.
|
||||
Only values in the range 4-32 are tested.
|
||||
|
||||
If you are unsure about this, use the default value 8
|
||||
If you are unsure about this, use the default value 16
|
||||
|
||||
config DVB_DYNAMIC_MINORS
|
||||
bool "Dynamic DVB minor allocation"
|
||||
|
@ -27,3 +27,16 @@ config DVB_DYNAMIC_MINORS
|
|||
will be required to manage the device nodes.
|
||||
|
||||
If you are unsure about this, say N here.
|
||||
|
||||
config DVB_DEMUX_SECTION_LOSS_LOG
|
||||
bool "Enable DVB demux section packet loss log"
|
||||
depends on DVB_CORE
|
||||
default n
|
||||
help
|
||||
Enable extra log messages meant to detect packet loss
|
||||
inside the Kernel.
|
||||
|
||||
Should not be enabled on normal cases, as logs can
|
||||
be very verbose.
|
||||
|
||||
If you are unsure about this, say N here.
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
dvb-net-$(CONFIG_DVB_NET) := dvb_net.o
|
||||
|
||||
dvb-core-objs := dvbdev.o dmxdev.o dvb_demux.o dvb_filter.o \
|
||||
dvb-core-objs := dvbdev.o dmxdev.o dvb_demux.o \
|
||||
dvb_ca_en50221.o dvb_frontend.o \
|
||||
$(dvb-net-y) dvb_ringbuffer.o dvb_math.o
|
||||
|
||||
|
|
|
@ -103,7 +103,6 @@ struct dmx_ts_feed {
|
|||
u16 pid,
|
||||
int type,
|
||||
enum dmx_ts_pes pes_type,
|
||||
size_t circular_buffer_size,
|
||||
ktime_t timeout);
|
||||
int (*start_filtering)(struct dmx_ts_feed *feed);
|
||||
int (*stop_filtering)(struct dmx_ts_feed *feed);
|
||||
|
@ -181,7 +180,6 @@ struct dmx_section_feed {
|
|||
/* public: */
|
||||
int (*set)(struct dmx_section_feed *feed,
|
||||
u16 pid,
|
||||
size_t circular_buffer_size,
|
||||
int check_crc);
|
||||
int (*allocate_filter)(struct dmx_section_feed *feed,
|
||||
struct dmx_section_filter **filter);
|
||||
|
@ -206,8 +204,7 @@ struct dmx_section_feed {
|
|||
* the &dmx_demux.
|
||||
* Any TS packets that match the filter settings are copied to a circular
|
||||
* buffer. The filtered TS packets are delivered to the client using this
|
||||
* callback function. The size of the circular buffer is controlled by the
|
||||
* circular_buffer_size parameter of the &dmx_ts_feed.@set function.
|
||||
* callback function.
|
||||
* It is expected that the @buffer1 and @buffer2 callback parameters point to
|
||||
* addresses within the circular buffer, but other implementations are also
|
||||
* possible. Note that the called party should not try to free the memory
|
||||
|
|
|
@ -20,6 +20,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "dmxdev: " fmt
|
||||
|
||||
#include <linux/sched.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/slab.h>
|
||||
|
@ -36,7 +38,11 @@ static int debug;
|
|||
module_param(debug, int, 0644);
|
||||
MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off).");
|
||||
|
||||
#define dprintk if (debug) printk
|
||||
#define dprintk(fmt, arg...) do { \
|
||||
if (debug) \
|
||||
printk(KERN_DEBUG pr_fmt("%s: " fmt), \
|
||||
__func__, ##arg); \
|
||||
} while (0)
|
||||
|
||||
static int dvb_dmxdev_buffer_write(struct dvb_ringbuffer *buf,
|
||||
const u8 *src, size_t len)
|
||||
|
@ -50,7 +56,7 @@ static int dvb_dmxdev_buffer_write(struct dvb_ringbuffer *buf,
|
|||
|
||||
free = dvb_ringbuffer_free(buf);
|
||||
if (len > free) {
|
||||
dprintk("dmxdev: buffer overflow\n");
|
||||
dprintk("buffer overflow\n");
|
||||
return -EOVERFLOW;
|
||||
}
|
||||
|
||||
|
@ -126,7 +132,7 @@ static int dvb_dvr_open(struct inode *inode, struct file *file)
|
|||
struct dmxdev *dmxdev = dvbdev->priv;
|
||||
struct dmx_frontend *front;
|
||||
|
||||
dprintk("function : %s\n", __func__);
|
||||
dprintk("%s\n", __func__);
|
||||
|
||||
if (mutex_lock_interruptible(&dmxdev->mutex))
|
||||
return -ERESTARTSYS;
|
||||
|
@ -258,7 +264,7 @@ static int dvb_dvr_set_buffer_size(struct dmxdev *dmxdev,
|
|||
void *newmem;
|
||||
void *oldmem;
|
||||
|
||||
dprintk("function : %s\n", __func__);
|
||||
dprintk("%s\n", __func__);
|
||||
|
||||
if (buf->size == size)
|
||||
return 0;
|
||||
|
@ -367,7 +373,7 @@ static int dvb_dmxdev_section_callback(const u8 *buffer1, size_t buffer1_len,
|
|||
return 0;
|
||||
}
|
||||
del_timer(&dmxdevfilter->timer);
|
||||
dprintk("dmxdev: section callback %*ph\n", 6, buffer1);
|
||||
dprintk("section callback %*ph\n", 6, buffer1);
|
||||
ret = dvb_dmxdev_buffer_write(&dmxdevfilter->buffer, buffer1,
|
||||
buffer1_len);
|
||||
if (ret == buffer1_len) {
|
||||
|
@ -589,7 +595,7 @@ static int dvb_dmxdev_start_feed(struct dmxdev *dmxdev,
|
|||
tsfeed = feed->ts;
|
||||
tsfeed->priv = filter;
|
||||
|
||||
ret = tsfeed->set(tsfeed, feed->pid, ts_type, ts_pes, 32768, timeout);
|
||||
ret = tsfeed->set(tsfeed, feed->pid, ts_type, ts_pes, timeout);
|
||||
if (ret < 0) {
|
||||
dmxdev->demux->release_ts_feed(dmxdev->demux, tsfeed);
|
||||
return ret;
|
||||
|
@ -655,15 +661,15 @@ static int dvb_dmxdev_filter_start(struct dmxdev_filter *filter)
|
|||
secfeed,
|
||||
dvb_dmxdev_section_callback);
|
||||
if (ret < 0) {
|
||||
printk("DVB (%s): could not alloc feed\n",
|
||||
pr_err("DVB (%s): could not alloc feed\n",
|
||||
__func__);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = (*secfeed)->set(*secfeed, para->pid, 32768,
|
||||
ret = (*secfeed)->set(*secfeed, para->pid,
|
||||
(para->flags & DMX_CHECK_CRC) ? 1 : 0);
|
||||
if (ret < 0) {
|
||||
printk("DVB (%s): could not set feed\n",
|
||||
pr_err("DVB (%s): could not set feed\n",
|
||||
__func__);
|
||||
dvb_dmxdev_feed_restart(filter);
|
||||
return ret;
|
||||
|
@ -844,7 +850,7 @@ static int dvb_dmxdev_filter_set(struct dmxdev *dmxdev,
|
|||
struct dmxdev_filter *dmxdevfilter,
|
||||
struct dmx_sct_filter_params *params)
|
||||
{
|
||||
dprintk("function : %s, PID=0x%04x, flags=%02x, timeout=%d\n",
|
||||
dprintk("%s: PID=0x%04x, flags=%02x, timeout=%d\n",
|
||||
__func__, params->pid, params->flags, params->timeout);
|
||||
|
||||
dvb_dmxdev_filter_stop(dmxdevfilter);
|
||||
|
@ -1184,7 +1190,7 @@ static unsigned int dvb_dvr_poll(struct file *file, poll_table *wait)
|
|||
struct dmxdev *dmxdev = dvbdev->priv;
|
||||
unsigned int mask = 0;
|
||||
|
||||
dprintk("function : %s\n", __func__);
|
||||
dprintk("%s\n", __func__);
|
||||
|
||||
if (dmxdev->exit)
|
||||
return POLLERR;
|
||||
|
|
|
@ -262,6 +262,7 @@
|
|||
#define USB_PID_TECHNOTREND_CONNECT_CT2_4650_CI 0x3012
|
||||
#define USB_PID_TECHNOTREND_CONNECT_CT2_4650_CI_2 0x3015
|
||||
#define USB_PID_TECHNOTREND_TVSTICK_CT2_4400 0x3014
|
||||
#define USB_PID_TECHNOTREND_CONNECT_S2_4650_CI 0x3017
|
||||
#define USB_PID_TERRATEC_CINERGY_DT_XS_DIVERSITY 0x005a
|
||||
#define USB_PID_TERRATEC_CINERGY_DT_XS_DIVERSITY_2 0x0081
|
||||
#define USB_PID_TERRATEC_CINERGY_HT_USB_XE 0x0058
|
||||
|
@ -411,4 +412,5 @@
|
|||
#define USB_PID_SVEON_STV27 0xd3af
|
||||
#define USB_PID_TURBOX_DTT_2000 0xd3a4
|
||||
#define USB_PID_WINTV_SOLOHD 0x0264
|
||||
#define USB_PID_EVOLVEO_XTRATV_STICK 0xa115
|
||||
#endif
|
||||
|
|
|
@ -28,6 +28,8 @@
|
|||
* Or, point your browser to http://www.gnu.org/copyleft/gpl.html
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "dvb_ca_en50221: " fmt
|
||||
|
||||
#include <linux/errno.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/list.h>
|
||||
|
@ -46,7 +48,10 @@ static int dvb_ca_en50221_debug;
|
|||
module_param_named(cam_debug, dvb_ca_en50221_debug, int, 0644);
|
||||
MODULE_PARM_DESC(cam_debug, "enable verbose debug messages");
|
||||
|
||||
#define dprintk if (dvb_ca_en50221_debug) printk
|
||||
#define dprintk(fmt, arg...) do { \
|
||||
if (dvb_ca_en50221_debug) \
|
||||
printk(KERN_DEBUG pr_fmt("%s: " fmt), __func__, ##arg);\
|
||||
} while (0)
|
||||
|
||||
#define INIT_TIMEOUT_SECS 10
|
||||
|
||||
|
@ -166,7 +171,7 @@ static void dvb_ca_private_free(struct dvb_ca_private *ca)
|
|||
{
|
||||
unsigned int i;
|
||||
|
||||
dvb_unregister_device(ca->dvbdev);
|
||||
dvb_free_device(ca->dvbdev);
|
||||
for (i = 0; i < ca->slot_count; i++)
|
||||
vfree(ca->slot_info[i].rx_buffer.data);
|
||||
|
||||
|
@ -298,7 +303,8 @@ static int dvb_ca_en50221_wait_if_status(struct dvb_ca_private *ca, int slot,
|
|||
|
||||
/* if we got the flags, it was successful! */
|
||||
if (res & waitfor) {
|
||||
dprintk("%s succeeded timeout:%lu\n", __func__, jiffies - start);
|
||||
dprintk("%s succeeded timeout:%lu\n",
|
||||
__func__, jiffies - start);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -519,8 +525,9 @@ static int dvb_ca_en50221_parse_attributes(struct dvb_ca_private *ca, int slot)
|
|||
|
||||
/* is it a version we support? */
|
||||
if (strncmp(dvb_str + 8, "1.00", 4)) {
|
||||
printk("dvb_ca adapter %d: Unsupported DVB CAM module version %c%c%c%c\n",
|
||||
ca->dvbdev->adapter->num, dvb_str[8], dvb_str[9], dvb_str[10], dvb_str[11]);
|
||||
pr_err("dvb_ca adapter %d: Unsupported DVB CAM module version %c%c%c%c\n",
|
||||
ca->dvbdev->adapter->num, dvb_str[8], dvb_str[9],
|
||||
dvb_str[10], dvb_str[11]);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -557,8 +564,8 @@ static int dvb_ca_en50221_parse_attributes(struct dvb_ca_private *ca, int slot)
|
|||
break;
|
||||
|
||||
default: /* Unknown tuple type - just skip this tuple and move to the next one */
|
||||
dprintk("dvb_ca: Skipping unknown tuple type:0x%x length:0x%x\n", tupleType,
|
||||
tupleLength);
|
||||
dprintk("dvb_ca: Skipping unknown tuple type:0x%x length:0x%x\n",
|
||||
tupleType, tupleLength);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -567,7 +574,8 @@ static int dvb_ca_en50221_parse_attributes(struct dvb_ca_private *ca, int slot)
|
|||
return -EINVAL;
|
||||
|
||||
dprintk("Valid DVB CAM detected MANID:%x DEVID:%x CONFIGBASE:0x%x CONFIGOPTION:0x%x\n",
|
||||
manfid, devid, ca->slot_info[slot].config_base, ca->slot_info[slot].config_option);
|
||||
manfid, devid, ca->slot_info[slot].config_base,
|
||||
ca->slot_info[slot].config_option);
|
||||
|
||||
// success!
|
||||
return 0;
|
||||
|
@ -661,14 +669,15 @@ static int dvb_ca_en50221_read_data(struct dvb_ca_private *ca, int slot, u8 * eb
|
|||
/* check it will fit */
|
||||
if (ebuf == NULL) {
|
||||
if (bytes_read > ca->slot_info[slot].link_buf_size) {
|
||||
printk("dvb_ca adapter %d: CAM tried to send a buffer larger than the link buffer size (%i > %i)!\n",
|
||||
ca->dvbdev->adapter->num, bytes_read, ca->slot_info[slot].link_buf_size);
|
||||
pr_err("dvb_ca adapter %d: CAM tried to send a buffer larger than the link buffer size (%i > %i)!\n",
|
||||
ca->dvbdev->adapter->num, bytes_read,
|
||||
ca->slot_info[slot].link_buf_size);
|
||||
ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_LINKINIT;
|
||||
status = -EIO;
|
||||
goto exit;
|
||||
}
|
||||
if (bytes_read < 2) {
|
||||
printk("dvb_ca adapter %d: CAM sent a buffer that was less than 2 bytes!\n",
|
||||
pr_err("dvb_ca adapter %d: CAM sent a buffer that was less than 2 bytes!\n",
|
||||
ca->dvbdev->adapter->num);
|
||||
ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_LINKINIT;
|
||||
status = -EIO;
|
||||
|
@ -676,7 +685,7 @@ static int dvb_ca_en50221_read_data(struct dvb_ca_private *ca, int slot, u8 * eb
|
|||
}
|
||||
} else {
|
||||
if (bytes_read > ecount) {
|
||||
printk("dvb_ca adapter %d: CAM tried to send a buffer larger than the ecount size!\n",
|
||||
pr_err("dvb_ca adapter %d: CAM tried to send a buffer larger than the ecount size!\n",
|
||||
ca->dvbdev->adapter->num);
|
||||
status = -EIO;
|
||||
goto exit;
|
||||
|
@ -1062,7 +1071,7 @@ static int dvb_ca_en50221_thread(void *data)
|
|||
|
||||
case DVB_CA_SLOTSTATE_WAITREADY:
|
||||
if (time_after(jiffies, ca->slot_info[slot].timeout)) {
|
||||
printk("dvb_ca adaptor %d: PC card did not respond :(\n",
|
||||
pr_err("dvb_ca adaptor %d: PC card did not respond :(\n",
|
||||
ca->dvbdev->adapter->num);
|
||||
ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_INVALID;
|
||||
dvb_ca_en50221_thread_update_delay(ca);
|
||||
|
@ -1084,14 +1093,14 @@ static int dvb_ca_en50221_thread(void *data)
|
|||
}
|
||||
}
|
||||
|
||||
printk("dvb_ca adapter %d: Invalid PC card inserted :(\n",
|
||||
pr_err("dvb_ca adapter %d: Invalid PC card inserted :(\n",
|
||||
ca->dvbdev->adapter->num);
|
||||
ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_INVALID;
|
||||
dvb_ca_en50221_thread_update_delay(ca);
|
||||
break;
|
||||
}
|
||||
if (dvb_ca_en50221_set_configoption(ca, slot) != 0) {
|
||||
printk("dvb_ca adapter %d: Unable to initialise CAM :(\n",
|
||||
pr_err("dvb_ca adapter %d: Unable to initialise CAM :(\n",
|
||||
ca->dvbdev->adapter->num);
|
||||
ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_INVALID;
|
||||
dvb_ca_en50221_thread_update_delay(ca);
|
||||
|
@ -1099,7 +1108,7 @@ static int dvb_ca_en50221_thread(void *data)
|
|||
}
|
||||
if (ca->pub->write_cam_control(ca->pub, slot,
|
||||
CTRLIF_COMMAND, CMDREG_RS) != 0) {
|
||||
printk("dvb_ca adapter %d: Unable to reset CAM IF\n",
|
||||
pr_err("dvb_ca adapter %d: Unable to reset CAM IF\n",
|
||||
ca->dvbdev->adapter->num);
|
||||
ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_INVALID;
|
||||
dvb_ca_en50221_thread_update_delay(ca);
|
||||
|
@ -1114,7 +1123,7 @@ static int dvb_ca_en50221_thread(void *data)
|
|||
|
||||
case DVB_CA_SLOTSTATE_WAITFR:
|
||||
if (time_after(jiffies, ca->slot_info[slot].timeout)) {
|
||||
printk("dvb_ca adapter %d: DVB CAM did not respond :(\n",
|
||||
pr_err("dvb_ca adapter %d: DVB CAM did not respond :(\n",
|
||||
ca->dvbdev->adapter->num);
|
||||
ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_INVALID;
|
||||
dvb_ca_en50221_thread_update_delay(ca);
|
||||
|
@ -1141,7 +1150,8 @@ static int dvb_ca_en50221_thread(void *data)
|
|||
}
|
||||
}
|
||||
|
||||
printk("dvb_ca adapter %d: DVB CAM link initialisation failed :(\n", ca->dvbdev->adapter->num);
|
||||
pr_err("dvb_ca adapter %d: DVB CAM link initialisation failed :(\n",
|
||||
ca->dvbdev->adapter->num);
|
||||
ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_INVALID;
|
||||
dvb_ca_en50221_thread_update_delay(ca);
|
||||
break;
|
||||
|
@ -1150,7 +1160,8 @@ static int dvb_ca_en50221_thread(void *data)
|
|||
if (ca->slot_info[slot].rx_buffer.data == NULL) {
|
||||
rxbuf = vmalloc(RX_BUFFER_SIZE);
|
||||
if (rxbuf == NULL) {
|
||||
printk("dvb_ca adapter %d: Unable to allocate CAM rx buffer :(\n", ca->dvbdev->adapter->num);
|
||||
pr_err("dvb_ca adapter %d: Unable to allocate CAM rx buffer :(\n",
|
||||
ca->dvbdev->adapter->num);
|
||||
ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_INVALID;
|
||||
dvb_ca_en50221_thread_update_delay(ca);
|
||||
break;
|
||||
|
@ -1161,7 +1172,8 @@ static int dvb_ca_en50221_thread(void *data)
|
|||
ca->pub->slot_ts_enable(ca->pub, slot);
|
||||
ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_RUNNING;
|
||||
dvb_ca_en50221_thread_update_delay(ca);
|
||||
printk("dvb_ca adapter %d: DVB CAM detected and initialised successfully\n", ca->dvbdev->adapter->num);
|
||||
pr_err("dvb_ca adapter %d: DVB CAM detected and initialised successfully\n",
|
||||
ca->dvbdev->adapter->num);
|
||||
break;
|
||||
|
||||
case DVB_CA_SLOTSTATE_RUNNING:
|
||||
|
@ -1497,7 +1509,8 @@ static ssize_t dvb_ca_en50221_io_read(struct file *file, char __user * buf,
|
|||
pktlen = 2;
|
||||
do {
|
||||
if (idx == -1) {
|
||||
printk("dvb_ca adapter %d: BUG: read packet ended before last_fragment encountered\n", ca->dvbdev->adapter->num);
|
||||
pr_err("dvb_ca adapter %d: BUG: read packet ended before last_fragment encountered\n",
|
||||
ca->dvbdev->adapter->num);
|
||||
status = -EIO;
|
||||
goto exit;
|
||||
}
|
||||
|
@ -1755,8 +1768,8 @@ int dvb_ca_en50221_init(struct dvb_adapter *dvb_adapter,
|
|||
ca->dvbdev->adapter->num, ca->dvbdev->id);
|
||||
if (IS_ERR(ca->thread)) {
|
||||
ret = PTR_ERR(ca->thread);
|
||||
printk("dvb_ca_init: failed to start kernel_thread (%d)\n",
|
||||
ret);
|
||||
pr_err("dvb_ca_init: failed to start kernel_thread (%d)\n",
|
||||
ret);
|
||||
goto unregister_device;
|
||||
}
|
||||
return 0;
|
||||
|
@ -1794,6 +1807,7 @@ void dvb_ca_en50221_release(struct dvb_ca_en50221 *pubca)
|
|||
for (i = 0; i < ca->slot_count; i++) {
|
||||
dvb_ca_en50221_slot_shutdown(ca, i);
|
||||
}
|
||||
dvb_remove_device(ca->dvbdev);
|
||||
dvb_ca_private_put(ca);
|
||||
pubca->private = NULL;
|
||||
}
|
||||
|
|
|
@ -21,6 +21,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "dvb_demux: " fmt
|
||||
|
||||
#include <linux/sched.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/slab.h>
|
||||
|
@ -34,12 +36,6 @@
|
|||
|
||||
#include "dvb_demux.h"
|
||||
|
||||
#define NOBUFS
|
||||
/*
|
||||
** #define DVB_DEMUX_SECTION_LOSS_LOG to monitor payload loss in the syslog
|
||||
*/
|
||||
// #define DVB_DEMUX_SECTION_LOSS_LOG
|
||||
|
||||
static int dvb_demux_tscheck;
|
||||
module_param(dvb_demux_tscheck, int, 0644);
|
||||
MODULE_PARM_DESC(dvb_demux_tscheck,
|
||||
|
@ -55,10 +51,13 @@ module_param(dvb_demux_feed_err_pkts, int, 0644);
|
|||
MODULE_PARM_DESC(dvb_demux_feed_err_pkts,
|
||||
"when set to 0, drop packets with the TEI bit set (1 by default)");
|
||||
|
||||
#define dprintk_tscheck(x...) do { \
|
||||
if (dvb_demux_tscheck && printk_ratelimit()) \
|
||||
printk(x); \
|
||||
} while (0)
|
||||
#define dprintk(fmt, arg...) \
|
||||
printk(KERN_DEBUG pr_fmt("%s: " fmt), __func__, ##arg)
|
||||
|
||||
#define dprintk_tscheck(x...) do { \
|
||||
if (dvb_demux_tscheck && printk_ratelimit()) \
|
||||
dprintk(x); \
|
||||
} while (0)
|
||||
|
||||
/******************************************************************************
|
||||
* static inlined helper functions
|
||||
|
@ -109,21 +108,23 @@ static inline int dvb_dmx_swfilter_payload(struct dvb_demux_feed *feed,
|
|||
{
|
||||
int count = payload(buf);
|
||||
int p;
|
||||
//int ccok;
|
||||
//u8 cc;
|
||||
#ifdef CONFIG_DVB_DEMUX_SECTION_LOSS_LOG
|
||||
int ccok;
|
||||
u8 cc;
|
||||
#endif
|
||||
|
||||
if (count == 0)
|
||||
return -1;
|
||||
|
||||
p = 188 - count;
|
||||
|
||||
/*
|
||||
#ifdef CONFIG_DVB_DEMUX_SECTION_LOSS_LOG
|
||||
cc = buf[3] & 0x0f;
|
||||
ccok = ((feed->cc + 1) & 0x0f) == cc;
|
||||
feed->cc = cc;
|
||||
if (!ccok)
|
||||
printk("missed packet!\n");
|
||||
*/
|
||||
dprintk("missed packet!\n");
|
||||
#endif
|
||||
|
||||
if (buf[1] & 0x40) // PUSI ?
|
||||
feed->peslen = 0xfffa;
|
||||
|
@ -189,7 +190,7 @@ static void dvb_dmx_swfilter_section_new(struct dvb_demux_feed *feed)
|
|||
{
|
||||
struct dmx_section_feed *sec = &feed->feed.sec;
|
||||
|
||||
#ifdef DVB_DEMUX_SECTION_LOSS_LOG
|
||||
#ifdef CONFIG_DVB_DEMUX_SECTION_LOSS_LOG
|
||||
if (sec->secbufp < sec->tsfeedp) {
|
||||
int i, n = sec->tsfeedp - sec->secbufp;
|
||||
|
||||
|
@ -199,12 +200,12 @@ static void dvb_dmx_swfilter_section_new(struct dvb_demux_feed *feed)
|
|||
* but just first and last.
|
||||
*/
|
||||
if (sec->secbuf[0] != 0xff || sec->secbuf[n - 1] != 0xff) {
|
||||
printk("dvb_demux.c section ts padding loss: %d/%d\n",
|
||||
dprintk("dvb_demux.c section ts padding loss: %d/%d\n",
|
||||
n, sec->tsfeedp);
|
||||
printk("dvb_demux.c pad data:");
|
||||
dprintk("dvb_demux.c pad data:");
|
||||
for (i = 0; i < n; i++)
|
||||
printk(" %02x", sec->secbuf[i]);
|
||||
printk("\n");
|
||||
pr_cont(" %02x", sec->secbuf[i]);
|
||||
pr_cont("\n");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -242,8 +243,8 @@ static int dvb_dmx_swfilter_section_copy_dump(struct dvb_demux_feed *feed,
|
|||
return 0;
|
||||
|
||||
if (sec->tsfeedp + len > DMX_MAX_SECFEED_SIZE) {
|
||||
#ifdef DVB_DEMUX_SECTION_LOSS_LOG
|
||||
printk("dvb_demux.c section buffer full loss: %d/%d\n",
|
||||
#ifdef CONFIG_DVB_DEMUX_SECTION_LOSS_LOG
|
||||
dprintk("dvb_demux.c section buffer full loss: %d/%d\n",
|
||||
sec->tsfeedp + len - DMX_MAX_SECFEED_SIZE,
|
||||
DMX_MAX_SECFEED_SIZE);
|
||||
#endif
|
||||
|
@ -276,9 +277,9 @@ static int dvb_dmx_swfilter_section_copy_dump(struct dvb_demux_feed *feed,
|
|||
/* dump [secbuf .. secbuf+seclen) */
|
||||
if (feed->pusi_seen)
|
||||
dvb_dmx_swfilter_section_feed(feed);
|
||||
#ifdef DVB_DEMUX_SECTION_LOSS_LOG
|
||||
#ifdef CONFIG_DVB_DEMUX_SECTION_LOSS_LOG
|
||||
else
|
||||
printk("dvb_demux.c pusi not seen, discarding section data\n");
|
||||
dprintk("dvb_demux.c pusi not seen, discarding section data\n");
|
||||
#endif
|
||||
sec->secbufp += seclen; /* secbufp and secbuf moving together is */
|
||||
sec->secbuf += seclen; /* redundant but saves pointer arithmetic */
|
||||
|
@ -312,9 +313,9 @@ static int dvb_dmx_swfilter_section_packet(struct dvb_demux_feed *feed,
|
|||
}
|
||||
|
||||
if (!ccok || dc_i) {
|
||||
#ifdef DVB_DEMUX_SECTION_LOSS_LOG
|
||||
printk("dvb_demux.c discontinuity detected %d bytes lost\n",
|
||||
count);
|
||||
#ifdef CONFIG_DVB_DEMUX_SECTION_LOSS_LOG
|
||||
dprintk("dvb_demux.c discontinuity detected %d bytes lost\n",
|
||||
count);
|
||||
/*
|
||||
* those bytes under sume circumstances will again be reported
|
||||
* in the following dvb_dmx_swfilter_section_new
|
||||
|
@ -344,9 +345,10 @@ static int dvb_dmx_swfilter_section_packet(struct dvb_demux_feed *feed,
|
|||
dvb_dmx_swfilter_section_copy_dump(feed, after,
|
||||
after_len);
|
||||
}
|
||||
#ifdef DVB_DEMUX_SECTION_LOSS_LOG
|
||||
#ifdef CONFIG_DVB_DEMUX_SECTION_LOSS_LOG
|
||||
else if (count > 0)
|
||||
printk("dvb_demux.c PUSI=1 but %d bytes lost\n", count);
|
||||
dprintk("dvb_demux.c PUSI=1 but %d bytes lost\n",
|
||||
count);
|
||||
#endif
|
||||
} else {
|
||||
/* PUSI=0 (is not set), no section boundary */
|
||||
|
@ -415,9 +417,9 @@ static void dvb_dmx_swfilter_packet(struct dvb_demux *demux, const u8 *buf)
|
|||
1024);
|
||||
speed_timedelta = ktime_ms_delta(cur_time,
|
||||
demux->speed_last_time);
|
||||
printk(KERN_INFO "TS speed %llu Kbits/sec \n",
|
||||
div64_u64(speed_bytes,
|
||||
speed_timedelta));
|
||||
dprintk("TS speed %llu Kbits/sec \n",
|
||||
div64_u64(speed_bytes,
|
||||
speed_timedelta));
|
||||
}
|
||||
|
||||
demux->speed_last_time = cur_time;
|
||||
|
@ -426,8 +428,7 @@ static void dvb_dmx_swfilter_packet(struct dvb_demux *demux, const u8 *buf)
|
|||
}
|
||||
|
||||
if (buf[1] & 0x80) {
|
||||
dprintk_tscheck("TEI detected. "
|
||||
"PID=0x%x data1=0x%x\n",
|
||||
dprintk_tscheck("TEI detected. PID=0x%x data1=0x%x\n",
|
||||
pid, buf[1]);
|
||||
/* data in this packet can't be trusted - drop it unless
|
||||
* module option dvb_demux_feed_err_pkts is set */
|
||||
|
@ -635,7 +636,7 @@ static void dvb_demux_feed_add(struct dvb_demux_feed *feed)
|
|||
{
|
||||
spin_lock_irq(&feed->demux->lock);
|
||||
if (dvb_demux_feed_find(feed)) {
|
||||
printk(KERN_ERR "%s: feed already in list (type=%x state=%x pid=%x)\n",
|
||||
pr_err("%s: feed already in list (type=%x state=%x pid=%x)\n",
|
||||
__func__, feed->type, feed->state, feed->pid);
|
||||
goto out;
|
||||
}
|
||||
|
@ -649,7 +650,7 @@ static void dvb_demux_feed_del(struct dvb_demux_feed *feed)
|
|||
{
|
||||
spin_lock_irq(&feed->demux->lock);
|
||||
if (!(dvb_demux_feed_find(feed))) {
|
||||
printk(KERN_ERR "%s: feed not in list (type=%x state=%x pid=%x)\n",
|
||||
pr_err("%s: feed not in list (type=%x state=%x pid=%x)\n",
|
||||
__func__, feed->type, feed->state, feed->pid);
|
||||
goto out;
|
||||
}
|
||||
|
@ -660,8 +661,7 @@ static void dvb_demux_feed_del(struct dvb_demux_feed *feed)
|
|||
}
|
||||
|
||||
static int dmx_ts_feed_set(struct dmx_ts_feed *ts_feed, u16 pid, int ts_type,
|
||||
enum dmx_ts_pes pes_type,
|
||||
size_t circular_buffer_size, ktime_t timeout)
|
||||
enum dmx_ts_pes pes_type, ktime_t timeout)
|
||||
{
|
||||
struct dvb_demux_feed *feed = (struct dvb_demux_feed *)ts_feed;
|
||||
struct dvb_demux *demux = feed->demux;
|
||||
|
@ -691,23 +691,10 @@ static int dmx_ts_feed_set(struct dmx_ts_feed *ts_feed, u16 pid, int ts_type,
|
|||
dvb_demux_feed_add(feed);
|
||||
|
||||
feed->pid = pid;
|
||||
feed->buffer_size = circular_buffer_size;
|
||||
feed->timeout = timeout;
|
||||
feed->ts_type = ts_type;
|
||||
feed->pes_type = pes_type;
|
||||
|
||||
if (feed->buffer_size) {
|
||||
#ifdef NOBUFS
|
||||
feed->buffer = NULL;
|
||||
#else
|
||||
feed->buffer = vmalloc(feed->buffer_size);
|
||||
if (!feed->buffer) {
|
||||
mutex_unlock(&demux->mutex);
|
||||
return -ENOMEM;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
feed->state = DMX_STATE_READY;
|
||||
mutex_unlock(&demux->mutex);
|
||||
|
||||
|
@ -796,7 +783,6 @@ static int dvbdmx_allocate_ts_feed(struct dmx_demux *dmx,
|
|||
feed->demux = demux;
|
||||
feed->pid = 0xffff;
|
||||
feed->peslen = 0xfffa;
|
||||
feed->buffer = NULL;
|
||||
|
||||
(*ts_feed) = &feed->feed.ts;
|
||||
(*ts_feed)->parent = dmx;
|
||||
|
@ -833,10 +819,6 @@ static int dvbdmx_release_ts_feed(struct dmx_demux *dmx,
|
|||
mutex_unlock(&demux->mutex);
|
||||
return -EINVAL;
|
||||
}
|
||||
#ifndef NOBUFS
|
||||
vfree(feed->buffer);
|
||||
feed->buffer = NULL;
|
||||
#endif
|
||||
|
||||
feed->state = DMX_STATE_FREE;
|
||||
feed->filter->state = DMX_STATE_FREE;
|
||||
|
@ -888,8 +870,7 @@ static int dmx_section_feed_allocate_filter(struct dmx_section_feed *feed,
|
|||
}
|
||||
|
||||
static int dmx_section_feed_set(struct dmx_section_feed *feed,
|
||||
u16 pid, size_t circular_buffer_size,
|
||||
int check_crc)
|
||||
u16 pid, int check_crc)
|
||||
{
|
||||
struct dvb_demux_feed *dvbdmxfeed = (struct dvb_demux_feed *)feed;
|
||||
struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
|
||||
|
@ -903,19 +884,8 @@ static int dmx_section_feed_set(struct dmx_section_feed *feed,
|
|||
dvb_demux_feed_add(dvbdmxfeed);
|
||||
|
||||
dvbdmxfeed->pid = pid;
|
||||
dvbdmxfeed->buffer_size = circular_buffer_size;
|
||||
dvbdmxfeed->feed.sec.check_crc = check_crc;
|
||||
|
||||
#ifdef NOBUFS
|
||||
dvbdmxfeed->buffer = NULL;
|
||||
#else
|
||||
dvbdmxfeed->buffer = vmalloc(dvbdmxfeed->buffer_size);
|
||||
if (!dvbdmxfeed->buffer) {
|
||||
mutex_unlock(&dvbdmx->mutex);
|
||||
return -ENOMEM;
|
||||
}
|
||||
#endif
|
||||
|
||||
dvbdmxfeed->state = DMX_STATE_READY;
|
||||
mutex_unlock(&dvbdmx->mutex);
|
||||
return 0;
|
||||
|
@ -1074,7 +1044,6 @@ static int dvbdmx_allocate_section_feed(struct dmx_demux *demux,
|
|||
dvbdmxfeed->feed.sec.secbufp = dvbdmxfeed->feed.sec.seclen = 0;
|
||||
dvbdmxfeed->feed.sec.tsfeedp = 0;
|
||||
dvbdmxfeed->filter = NULL;
|
||||
dvbdmxfeed->buffer = NULL;
|
||||
|
||||
(*feed) = &dvbdmxfeed->feed.sec;
|
||||
(*feed)->is_filtering = 0;
|
||||
|
@ -1103,10 +1072,6 @@ static int dvbdmx_release_section_feed(struct dmx_demux *demux,
|
|||
mutex_unlock(&dvbdmx->mutex);
|
||||
return -EINVAL;
|
||||
}
|
||||
#ifndef NOBUFS
|
||||
vfree(dvbdmxfeed->buffer);
|
||||
dvbdmxfeed->buffer = NULL;
|
||||
#endif
|
||||
dvbdmxfeed->state = DMX_STATE_FREE;
|
||||
|
||||
dvb_demux_feed_del(dvbdmxfeed);
|
||||
|
@ -1268,7 +1233,7 @@ int dvb_dmx_init(struct dvb_demux *dvbdemux)
|
|||
|
||||
dvbdemux->cnt_storage = vmalloc(MAX_PID + 1);
|
||||
if (!dvbdemux->cnt_storage)
|
||||
printk(KERN_WARNING "Couldn't allocate memory for TS/TEI check. Disabling it\n");
|
||||
pr_warn("Couldn't allocate memory for TS/TEI check. Disabling it\n");
|
||||
|
||||
INIT_LIST_HEAD(&dvbdemux->frontend_list);
|
||||
|
||||
|
|
|
@ -80,8 +80,6 @@ struct dvb_demux_feed {
|
|||
int type;
|
||||
int state;
|
||||
u16 pid;
|
||||
u8 *buffer;
|
||||
int buffer_size;
|
||||
|
||||
ktime_t timeout;
|
||||
struct dvb_demux_filter *filter;
|
||||
|
|
|
@ -1,603 +0,0 @@
|
|||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/string.h>
|
||||
#include "dvb_filter.h"
|
||||
|
||||
#if 0
|
||||
static unsigned int bitrates[3][16] =
|
||||
{{0,32,64,96,128,160,192,224,256,288,320,352,384,416,448,0},
|
||||
{0,32,48,56,64,80,96,112,128,160,192,224,256,320,384,0},
|
||||
{0,32,40,48,56,64,80,96,112,128,160,192,224,256,320,0}};
|
||||
#endif
|
||||
|
||||
static u32 freq[4] = {480, 441, 320, 0};
|
||||
|
||||
static unsigned int ac3_bitrates[32] =
|
||||
{32,40,48,56,64,80,96,112,128,160,192,224,256,320,384,448,512,576,640,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0};
|
||||
|
||||
static u32 ac3_frames[3][32] =
|
||||
{{64,80,96,112,128,160,192,224,256,320,384,448,512,640,768,896,1024,
|
||||
1152,1280,0,0,0,0,0,0,0,0,0,0,0,0,0},
|
||||
{69,87,104,121,139,174,208,243,278,348,417,487,557,696,835,975,1114,
|
||||
1253,1393,0,0,0,0,0,0,0,0,0,0,0,0,0},
|
||||
{96,120,144,168,192,240,288,336,384,480,576,672,768,960,1152,1344,
|
||||
1536,1728,1920,0,0,0,0,0,0,0,0,0,0,0,0,0}};
|
||||
|
||||
|
||||
|
||||
#if 0
|
||||
static void setup_ts2pes(ipack *pa, ipack *pv, u16 *pida, u16 *pidv,
|
||||
void (*pes_write)(u8 *buf, int count, void *data),
|
||||
void *priv)
|
||||
{
|
||||
dvb_filter_ipack_init(pa, IPACKS, pes_write);
|
||||
dvb_filter_ipack_init(pv, IPACKS, pes_write);
|
||||
pa->pid = pida;
|
||||
pv->pid = pidv;
|
||||
pa->data = priv;
|
||||
pv->data = priv;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
static void ts_to_pes(ipack *p, u8 *buf) // don't need count (=188)
|
||||
{
|
||||
u8 off = 0;
|
||||
|
||||
if (!buf || !p ){
|
||||
printk("NULL POINTER IDIOT\n");
|
||||
return;
|
||||
}
|
||||
if (buf[1]&PAY_START) {
|
||||
if (p->plength == MMAX_PLENGTH-6 && p->found>6){
|
||||
p->plength = p->found-6;
|
||||
p->found = 0;
|
||||
send_ipack(p);
|
||||
dvb_filter_ipack_reset(p);
|
||||
}
|
||||
}
|
||||
if (buf[3] & ADAPT_FIELD) { // adaptation field?
|
||||
off = buf[4] + 1;
|
||||
if (off+4 > 187) return;
|
||||
}
|
||||
dvb_filter_instant_repack(buf+4+off, TS_SIZE-4-off, p);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
/* needs 5 byte input, returns picture coding type*/
|
||||
static int read_picture_header(u8 *headr, struct mpg_picture *pic, int field, int pr)
|
||||
{
|
||||
u8 pct;
|
||||
|
||||
if (pr) printk( "Pic header: ");
|
||||
pic->temporal_reference[field] = (( headr[0] << 2 ) |
|
||||
(headr[1] & 0x03) )& 0x03ff;
|
||||
if (pr) printk( " temp ref: 0x%04x", pic->temporal_reference[field]);
|
||||
|
||||
pct = ( headr[1] >> 2 ) & 0x07;
|
||||
pic->picture_coding_type[field] = pct;
|
||||
if (pr) {
|
||||
switch(pct){
|
||||
case I_FRAME:
|
||||
printk( " I-FRAME");
|
||||
break;
|
||||
case B_FRAME:
|
||||
printk( " B-FRAME");
|
||||
break;
|
||||
case P_FRAME:
|
||||
printk( " P-FRAME");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
pic->vinfo.vbv_delay = (( headr[1] >> 5 ) | ( headr[2] << 3) |
|
||||
( (headr[3] & 0x1F) << 11) ) & 0xffff;
|
||||
|
||||
if (pr) printk( " vbv delay: 0x%04x", pic->vinfo.vbv_delay);
|
||||
|
||||
pic->picture_header_parameter = ( headr[3] & 0xe0 ) |
|
||||
((headr[4] & 0x80) >> 3);
|
||||
|
||||
if ( pct == B_FRAME ){
|
||||
pic->picture_header_parameter |= ( headr[4] >> 3 ) & 0x0f;
|
||||
}
|
||||
if (pr) printk( " pic head param: 0x%x",
|
||||
pic->picture_header_parameter);
|
||||
|
||||
return pct;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
/* needs 4 byte input */
|
||||
static int read_gop_header(u8 *headr, struct mpg_picture *pic, int pr)
|
||||
{
|
||||
if (pr) printk("GOP header: ");
|
||||
|
||||
pic->time_code = (( headr[0] << 17 ) | ( headr[1] << 9) |
|
||||
( headr[2] << 1 ) | (headr[3] &0x01)) & 0x1ffffff;
|
||||
|
||||
if (pr) printk(" time: %d:%d.%d ", (headr[0]>>2)& 0x1F,
|
||||
((headr[0]<<4)& 0x30)| ((headr[1]>>4)& 0x0F),
|
||||
((headr[1]<<3)& 0x38)| ((headr[2]>>5)& 0x0F));
|
||||
|
||||
if ( ( headr[3] & 0x40 ) != 0 ){
|
||||
pic->closed_gop = 1;
|
||||
} else {
|
||||
pic->closed_gop = 0;
|
||||
}
|
||||
if (pr) printk("closed: %d", pic->closed_gop);
|
||||
|
||||
if ( ( headr[3] & 0x20 ) != 0 ){
|
||||
pic->broken_link = 1;
|
||||
} else {
|
||||
pic->broken_link = 0;
|
||||
}
|
||||
if (pr) printk(" broken: %d\n", pic->broken_link);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
/* needs 8 byte input */
|
||||
static int read_sequence_header(u8 *headr, struct dvb_video_info *vi, int pr)
|
||||
{
|
||||
int sw;
|
||||
int form = -1;
|
||||
|
||||
if (pr) printk("Reading sequence header\n");
|
||||
|
||||
vi->horizontal_size = ((headr[1] &0xF0) >> 4) | (headr[0] << 4);
|
||||
vi->vertical_size = ((headr[1] &0x0F) << 8) | (headr[2]);
|
||||
|
||||
sw = (int)((headr[3]&0xF0) >> 4) ;
|
||||
|
||||
switch( sw ){
|
||||
case 1:
|
||||
if (pr)
|
||||
printk("Videostream: ASPECT: 1:1");
|
||||
vi->aspect_ratio = 100;
|
||||
break;
|
||||
case 2:
|
||||
if (pr)
|
||||
printk("Videostream: ASPECT: 4:3");
|
||||
vi->aspect_ratio = 133;
|
||||
break;
|
||||
case 3:
|
||||
if (pr)
|
||||
printk("Videostream: ASPECT: 16:9");
|
||||
vi->aspect_ratio = 177;
|
||||
break;
|
||||
case 4:
|
||||
if (pr)
|
||||
printk("Videostream: ASPECT: 2.21:1");
|
||||
vi->aspect_ratio = 221;
|
||||
break;
|
||||
|
||||
case 5 ... 15:
|
||||
if (pr)
|
||||
printk("Videostream: ASPECT: reserved");
|
||||
vi->aspect_ratio = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
vi->aspect_ratio = 0;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (pr)
|
||||
printk(" Size = %dx%d",vi->horizontal_size,vi->vertical_size);
|
||||
|
||||
sw = (int)(headr[3]&0x0F);
|
||||
|
||||
switch ( sw ) {
|
||||
case 1:
|
||||
if (pr)
|
||||
printk(" FRate: 23.976 fps");
|
||||
vi->framerate = 23976;
|
||||
form = -1;
|
||||
break;
|
||||
case 2:
|
||||
if (pr)
|
||||
printk(" FRate: 24 fps");
|
||||
vi->framerate = 24000;
|
||||
form = -1;
|
||||
break;
|
||||
case 3:
|
||||
if (pr)
|
||||
printk(" FRate: 25 fps");
|
||||
vi->framerate = 25000;
|
||||
form = VIDEO_MODE_PAL;
|
||||
break;
|
||||
case 4:
|
||||
if (pr)
|
||||
printk(" FRate: 29.97 fps");
|
||||
vi->framerate = 29970;
|
||||
form = VIDEO_MODE_NTSC;
|
||||
break;
|
||||
case 5:
|
||||
if (pr)
|
||||
printk(" FRate: 30 fps");
|
||||
vi->framerate = 30000;
|
||||
form = VIDEO_MODE_NTSC;
|
||||
break;
|
||||
case 6:
|
||||
if (pr)
|
||||
printk(" FRate: 50 fps");
|
||||
vi->framerate = 50000;
|
||||
form = VIDEO_MODE_PAL;
|
||||
break;
|
||||
case 7:
|
||||
if (pr)
|
||||
printk(" FRate: 60 fps");
|
||||
vi->framerate = 60000;
|
||||
form = VIDEO_MODE_NTSC;
|
||||
break;
|
||||
}
|
||||
|
||||
vi->bit_rate = (headr[4] << 10) | (headr[5] << 2) | (headr[6] & 0x03);
|
||||
|
||||
vi->vbv_buffer_size
|
||||
= (( headr[6] & 0xF8) >> 3 ) | (( headr[7] & 0x1F )<< 5);
|
||||
|
||||
if (pr){
|
||||
printk(" BRate: %d Mbit/s",4*(vi->bit_rate)/10000);
|
||||
printk(" vbvbuffer %d",16*1024*(vi->vbv_buffer_size));
|
||||
printk("\n");
|
||||
}
|
||||
|
||||
vi->video_format = form;
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#if 0
|
||||
static int get_vinfo(u8 *mbuf, int count, struct dvb_video_info *vi, int pr)
|
||||
{
|
||||
u8 *headr;
|
||||
int found = 0;
|
||||
int c = 0;
|
||||
|
||||
while (found < 4 && c+4 < count){
|
||||
u8 *b;
|
||||
|
||||
b = mbuf+c;
|
||||
if ( b[0] == 0x00 && b[1] == 0x00 && b[2] == 0x01
|
||||
&& b[3] == 0xb3) found = 4;
|
||||
else {
|
||||
c++;
|
||||
}
|
||||
}
|
||||
|
||||
if (! found) return -1;
|
||||
c += 4;
|
||||
if (c+12 >= count) return -1;
|
||||
headr = mbuf+c;
|
||||
if (read_sequence_header(headr, vi, pr) < 0) return -1;
|
||||
vi->off = c-4;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#if 0
|
||||
static int get_ainfo(u8 *mbuf, int count, struct dvb_audio_info *ai, int pr)
|
||||
{
|
||||
u8 *headr;
|
||||
int found = 0;
|
||||
int c = 0;
|
||||
int fr = 0;
|
||||
|
||||
while (found < 2 && c < count){
|
||||
u8 b[2];
|
||||
memcpy( b, mbuf+c, 2);
|
||||
|
||||
if ( b[0] == 0xff && (b[1] & 0xf8) == 0xf8)
|
||||
found = 2;
|
||||
else {
|
||||
c++;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found) return -1;
|
||||
|
||||
if (c+3 >= count) return -1;
|
||||
headr = mbuf+c;
|
||||
|
||||
ai->layer = (headr[1] & 0x06) >> 1;
|
||||
|
||||
if (pr)
|
||||
printk("Audiostream: Layer: %d", 4-ai->layer);
|
||||
|
||||
|
||||
ai->bit_rate = bitrates[(3-ai->layer)][(headr[2] >> 4 )]*1000;
|
||||
|
||||
if (pr){
|
||||
if (ai->bit_rate == 0)
|
||||
printk(" Bit rate: free");
|
||||
else if (ai->bit_rate == 0xf)
|
||||
printk(" BRate: reserved");
|
||||
else
|
||||
printk(" BRate: %d kb/s", ai->bit_rate/1000);
|
||||
}
|
||||
|
||||
fr = (headr[2] & 0x0c ) >> 2;
|
||||
ai->frequency = freq[fr]*100;
|
||||
if (pr){
|
||||
if (ai->frequency == 3)
|
||||
printk(" Freq: reserved\n");
|
||||
else
|
||||
printk(" Freq: %d kHz\n",ai->frequency);
|
||||
|
||||
}
|
||||
ai->off = c;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
int dvb_filter_get_ac3info(u8 *mbuf, int count, struct dvb_audio_info *ai, int pr)
|
||||
{
|
||||
u8 *headr;
|
||||
int found = 0;
|
||||
int c = 0;
|
||||
u8 frame = 0;
|
||||
int fr = 0;
|
||||
|
||||
while ( !found && c < count){
|
||||
u8 *b = mbuf+c;
|
||||
|
||||
if ( b[0] == 0x0b && b[1] == 0x77 )
|
||||
found = 1;
|
||||
else {
|
||||
c++;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found) return -1;
|
||||
if (pr)
|
||||
printk("Audiostream: AC3");
|
||||
|
||||
ai->off = c;
|
||||
if (c+5 >= count) return -1;
|
||||
|
||||
ai->layer = 0; // 0 for AC3
|
||||
headr = mbuf+c+2;
|
||||
|
||||
frame = (headr[2]&0x3f);
|
||||
ai->bit_rate = ac3_bitrates[frame >> 1]*1000;
|
||||
|
||||
if (pr)
|
||||
printk(" BRate: %d kb/s", (int) ai->bit_rate/1000);
|
||||
|
||||
ai->frequency = (headr[2] & 0xc0 ) >> 6;
|
||||
fr = (headr[2] & 0xc0 ) >> 6;
|
||||
ai->frequency = freq[fr]*100;
|
||||
if (pr) printk (" Freq: %d Hz\n", (int) ai->frequency);
|
||||
|
||||
|
||||
ai->framesize = ac3_frames[fr][frame >> 1];
|
||||
if ((frame & 1) && (fr == 1)) ai->framesize++;
|
||||
ai->framesize = ai->framesize << 1;
|
||||
if (pr) printk (" Framesize %d\n",(int) ai->framesize);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(dvb_filter_get_ac3info);
|
||||
|
||||
|
||||
#if 0
|
||||
static u8 *skip_pes_header(u8 **bufp)
|
||||
{
|
||||
u8 *inbuf = *bufp;
|
||||
u8 *buf = inbuf;
|
||||
u8 *pts = NULL;
|
||||
int skip = 0;
|
||||
|
||||
static const int mpeg1_skip_table[16] = {
|
||||
1, 0xffff, 5, 10, 0xffff, 0xffff, 0xffff, 0xffff,
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff
|
||||
};
|
||||
|
||||
|
||||
if ((inbuf[6] & 0xc0) == 0x80){ /* mpeg2 */
|
||||
if (buf[7] & PTS_ONLY)
|
||||
pts = buf+9;
|
||||
else pts = NULL;
|
||||
buf = inbuf + 9 + inbuf[8];
|
||||
} else { /* mpeg1 */
|
||||
for (buf = inbuf + 6; *buf == 0xff; buf++)
|
||||
if (buf == inbuf + 6 + 16) {
|
||||
break;
|
||||
}
|
||||
if ((*buf & 0xc0) == 0x40)
|
||||
buf += 2;
|
||||
skip = mpeg1_skip_table [*buf >> 4];
|
||||
if (skip == 5 || skip == 10) pts = buf;
|
||||
else pts = NULL;
|
||||
|
||||
buf += mpeg1_skip_table [*buf >> 4];
|
||||
}
|
||||
|
||||
*bufp = buf;
|
||||
return pts;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
static void initialize_quant_matrix( u32 *matrix )
|
||||
{
|
||||
int i;
|
||||
|
||||
matrix[0] = 0x08101013;
|
||||
matrix[1] = 0x10131616;
|
||||
matrix[2] = 0x16161616;
|
||||
matrix[3] = 0x1a181a1b;
|
||||
matrix[4] = 0x1b1b1a1a;
|
||||
matrix[5] = 0x1a1a1b1b;
|
||||
matrix[6] = 0x1b1d1d1d;
|
||||
matrix[7] = 0x2222221d;
|
||||
matrix[8] = 0x1d1d1b1b;
|
||||
matrix[9] = 0x1d1d2020;
|
||||
matrix[10] = 0x22222526;
|
||||
matrix[11] = 0x25232322;
|
||||
matrix[12] = 0x23262628;
|
||||
matrix[13] = 0x28283030;
|
||||
matrix[14] = 0x2e2e3838;
|
||||
matrix[15] = 0x3a454553;
|
||||
|
||||
for ( i = 16 ; i < 32 ; i++ )
|
||||
matrix[i] = 0x10101010;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
static void initialize_mpg_picture(struct mpg_picture *pic)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* set MPEG1 */
|
||||
pic->mpeg1_flag = 1;
|
||||
pic->profile_and_level = 0x4A ; /* MP@LL */
|
||||
pic->progressive_sequence = 1;
|
||||
pic->low_delay = 0;
|
||||
|
||||
pic->sequence_display_extension_flag = 0;
|
||||
for ( i = 0 ; i < 4 ; i++ ){
|
||||
pic->frame_centre_horizontal_offset[i] = 0;
|
||||
pic->frame_centre_vertical_offset[i] = 0;
|
||||
}
|
||||
pic->last_frame_centre_horizontal_offset = 0;
|
||||
pic->last_frame_centre_vertical_offset = 0;
|
||||
|
||||
pic->picture_display_extension_flag[0] = 0;
|
||||
pic->picture_display_extension_flag[1] = 0;
|
||||
pic->sequence_header_flag = 0;
|
||||
pic->gop_flag = 0;
|
||||
pic->sequence_end_flag = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
static void mpg_set_picture_parameter( int32_t field_type, struct mpg_picture *pic )
|
||||
{
|
||||
int16_t last_h_offset;
|
||||
int16_t last_v_offset;
|
||||
|
||||
int16_t *p_h_offset;
|
||||
int16_t *p_v_offset;
|
||||
|
||||
if ( pic->mpeg1_flag ){
|
||||
pic->picture_structure[field_type] = VIDEO_FRAME_PICTURE;
|
||||
pic->top_field_first = 0;
|
||||
pic->repeat_first_field = 0;
|
||||
pic->progressive_frame = 1;
|
||||
pic->picture_coding_parameter = 0x000010;
|
||||
}
|
||||
|
||||
/* Reset flag */
|
||||
pic->picture_display_extension_flag[field_type] = 0;
|
||||
|
||||
last_h_offset = pic->last_frame_centre_horizontal_offset;
|
||||
last_v_offset = pic->last_frame_centre_vertical_offset;
|
||||
if ( field_type == FIRST_FIELD ){
|
||||
p_h_offset = pic->frame_centre_horizontal_offset;
|
||||
p_v_offset = pic->frame_centre_vertical_offset;
|
||||
*p_h_offset = last_h_offset;
|
||||
*(p_h_offset + 1) = last_h_offset;
|
||||
*(p_h_offset + 2) = last_h_offset;
|
||||
*p_v_offset = last_v_offset;
|
||||
*(p_v_offset + 1) = last_v_offset;
|
||||
*(p_v_offset + 2) = last_v_offset;
|
||||
} else {
|
||||
pic->frame_centre_horizontal_offset[3] = last_h_offset;
|
||||
pic->frame_centre_vertical_offset[3] = last_v_offset;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
static void init_mpg_picture( struct mpg_picture *pic, int chan, int32_t field_type)
|
||||
{
|
||||
pic->picture_header = 0;
|
||||
pic->sequence_header_data
|
||||
= ( INIT_HORIZONTAL_SIZE << 20 )
|
||||
| ( INIT_VERTICAL_SIZE << 8 )
|
||||
| ( INIT_ASPECT_RATIO << 4 )
|
||||
| ( INIT_FRAME_RATE );
|
||||
pic->mpeg1_flag = 0;
|
||||
pic->vinfo.horizontal_size
|
||||
= INIT_DISP_HORIZONTAL_SIZE;
|
||||
pic->vinfo.vertical_size
|
||||
= INIT_DISP_VERTICAL_SIZE;
|
||||
pic->picture_display_extension_flag[field_type]
|
||||
= 0;
|
||||
pic->pts_flag[field_type] = 0;
|
||||
|
||||
pic->sequence_gop_header = 0;
|
||||
pic->picture_header = 0;
|
||||
pic->sequence_header_flag = 0;
|
||||
pic->gop_flag = 0;
|
||||
pic->sequence_end_flag = 0;
|
||||
pic->sequence_display_extension_flag = 0;
|
||||
pic->last_frame_centre_horizontal_offset = 0;
|
||||
pic->last_frame_centre_vertical_offset = 0;
|
||||
pic->channel = chan;
|
||||
}
|
||||
#endif
|
||||
|
||||
void dvb_filter_pes2ts_init(struct dvb_filter_pes2ts *p2ts, unsigned short pid,
|
||||
dvb_filter_pes2ts_cb_t *cb, void *priv)
|
||||
{
|
||||
unsigned char *buf=p2ts->buf;
|
||||
|
||||
buf[0]=0x47;
|
||||
buf[1]=(pid>>8);
|
||||
buf[2]=pid&0xff;
|
||||
p2ts->cc=0;
|
||||
p2ts->cb=cb;
|
||||
p2ts->priv=priv;
|
||||
}
|
||||
EXPORT_SYMBOL(dvb_filter_pes2ts_init);
|
||||
|
||||
int dvb_filter_pes2ts(struct dvb_filter_pes2ts *p2ts, unsigned char *pes,
|
||||
int len, int payload_start)
|
||||
{
|
||||
unsigned char *buf=p2ts->buf;
|
||||
int ret=0, rest;
|
||||
|
||||
//len=6+((pes[4]<<8)|pes[5]);
|
||||
|
||||
if (payload_start)
|
||||
buf[1]|=0x40;
|
||||
else
|
||||
buf[1]&=~0x40;
|
||||
while (len>=184) {
|
||||
buf[3]=0x10|((p2ts->cc++)&0x0f);
|
||||
memcpy(buf+4, pes, 184);
|
||||
if ((ret=p2ts->cb(p2ts->priv, buf)))
|
||||
return ret;
|
||||
len-=184; pes+=184;
|
||||
buf[1]&=~0x40;
|
||||
}
|
||||
if (!len)
|
||||
return 0;
|
||||
buf[3]=0x30|((p2ts->cc++)&0x0f);
|
||||
rest=183-len;
|
||||
if (rest) {
|
||||
buf[5]=0x00;
|
||||
if (rest-1)
|
||||
memset(buf+6, 0xff, rest-1);
|
||||
}
|
||||
buf[4]=rest;
|
||||
memcpy(buf+5+rest, pes, len);
|
||||
return p2ts->cb(p2ts->priv, buf);
|
||||
}
|
||||
EXPORT_SYMBOL(dvb_filter_pes2ts);
|
|
@ -28,6 +28,8 @@
|
|||
/* Enables DVBv3 compatibility bits at the headers */
|
||||
#define __DVB_CORE__
|
||||
|
||||
#define pr_fmt(fmt) "dvb_frontend: " fmt
|
||||
|
||||
#include <linux/string.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/sched.h>
|
||||
|
@ -67,6 +69,9 @@ MODULE_PARM_DESC(dvb_powerdown_on_sleep, "0: do not power down, 1: turn LNB volt
|
|||
module_param(dvb_mfe_wait_time, int, 0644);
|
||||
MODULE_PARM_DESC(dvb_mfe_wait_time, "Wait up to <mfe_wait_time> seconds on open() for multi-frontend to become available (default:5 seconds)");
|
||||
|
||||
#define dprintk(fmt, arg...) \
|
||||
printk(KERN_DEBUG pr_fmt("%s: " fmt), __func__, ##arg)
|
||||
|
||||
#define FESTATE_IDLE 1
|
||||
#define FESTATE_RETUNE 2
|
||||
#define FESTATE_TUNING_FAST 4
|
||||
|
@ -99,8 +104,6 @@ MODULE_PARM_DESC(dvb_mfe_wait_time, "Wait up to <mfe_wait_time> seconds on open(
|
|||
static DEFINE_MUTEX(frontend_mutex);
|
||||
|
||||
struct dvb_frontend_private {
|
||||
struct kref refcount;
|
||||
|
||||
/* thread/frontend values */
|
||||
struct dvb_device *dvbdev;
|
||||
struct dvb_frontend_parameters parameters_out;
|
||||
|
@ -138,21 +141,30 @@ struct dvb_frontend_private {
|
|||
#endif
|
||||
};
|
||||
|
||||
static void dvb_frontend_private_free(struct kref *ref)
|
||||
static void dvb_frontend_invoke_release(struct dvb_frontend *fe,
|
||||
void (*release)(struct dvb_frontend *fe));
|
||||
|
||||
static void dvb_frontend_free(struct kref *ref)
|
||||
{
|
||||
struct dvb_frontend_private *fepriv =
|
||||
container_of(ref, struct dvb_frontend_private, refcount);
|
||||
struct dvb_frontend *fe =
|
||||
container_of(ref, struct dvb_frontend, refcount);
|
||||
struct dvb_frontend_private *fepriv = fe->frontend_priv;
|
||||
|
||||
dvb_free_device(fepriv->dvbdev);
|
||||
|
||||
dvb_frontend_invoke_release(fe, fe->ops.release);
|
||||
|
||||
kfree(fepriv);
|
||||
}
|
||||
|
||||
static void dvb_frontend_private_put(struct dvb_frontend_private *fepriv)
|
||||
static void dvb_frontend_put(struct dvb_frontend *fe)
|
||||
{
|
||||
kref_put(&fepriv->refcount, dvb_frontend_private_free);
|
||||
kref_put(&fe->refcount, dvb_frontend_free);
|
||||
}
|
||||
|
||||
static void dvb_frontend_private_get(struct dvb_frontend_private *fepriv)
|
||||
static void dvb_frontend_get(struct dvb_frontend *fe)
|
||||
{
|
||||
kref_get(&fepriv->refcount);
|
||||
kref_get(&fe->refcount);
|
||||
}
|
||||
|
||||
static void dvb_frontend_wakeup(struct dvb_frontend *fe);
|
||||
|
@ -1515,12 +1527,8 @@ static int dtv_set_frontend(struct dvb_frontend *fe);
|
|||
|
||||
static bool is_dvbv3_delsys(u32 delsys)
|
||||
{
|
||||
bool status;
|
||||
|
||||
status = (delsys == SYS_DVBT) || (delsys == SYS_DVBC_ANNEX_A) ||
|
||||
(delsys == SYS_DVBS) || (delsys == SYS_ATSC);
|
||||
|
||||
return status;
|
||||
return (delsys == SYS_DVBT) || (delsys == SYS_DVBC_ANNEX_A) ||
|
||||
(delsys == SYS_DVBS) || (delsys == SYS_ATSC);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2356,7 +2364,8 @@ static int dvb_frontend_ioctl_legacy(struct file *file,
|
|||
int i;
|
||||
u8 last = 1;
|
||||
if (dvb_frontend_debug)
|
||||
printk("%s switch command: 0x%04lx\n", __func__, swcmd);
|
||||
dprintk("%s switch command: 0x%04lx\n",
|
||||
__func__, swcmd);
|
||||
nexttime = ktime_get_boottime();
|
||||
if (dvb_frontend_debug)
|
||||
tv[0] = nexttime;
|
||||
|
@ -2379,10 +2388,10 @@ static int dvb_frontend_ioctl_legacy(struct file *file,
|
|||
dvb_frontend_sleep_until(&nexttime, 8000);
|
||||
}
|
||||
if (dvb_frontend_debug) {
|
||||
printk("%s(%d): switch delay (should be 32k followed by all 8k\n",
|
||||
dprintk("%s(%d): switch delay (should be 32k followed by all 8k)\n",
|
||||
__func__, fe->dvb->num);
|
||||
for (i = 1; i < 10; i++)
|
||||
printk("%d: %d\n", i,
|
||||
pr_info("%d: %d\n", i,
|
||||
(int) ktime_us_delta(tv[i], tv[i-1]));
|
||||
}
|
||||
err = 0;
|
||||
|
@ -2545,7 +2554,7 @@ static int dvb_frontend_open(struct inode *inode, struct file *file)
|
|||
fepriv->events.eventr = fepriv->events.eventw = 0;
|
||||
}
|
||||
|
||||
dvb_frontend_private_get(fepriv);
|
||||
dvb_frontend_get(fe);
|
||||
|
||||
if (adapter->mfe_shared)
|
||||
mutex_unlock (&adapter->mfe_lock);
|
||||
|
@ -2595,7 +2604,7 @@ static int dvb_frontend_release(struct inode *inode, struct file *file)
|
|||
fe->ops.ts_bus_ctrl(fe, 0);
|
||||
}
|
||||
|
||||
dvb_frontend_private_put(fepriv);
|
||||
dvb_frontend_put(fe);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -2685,7 +2694,14 @@ int dvb_register_frontend(struct dvb_adapter* dvb,
|
|||
}
|
||||
fepriv = fe->frontend_priv;
|
||||
|
||||
kref_init(&fepriv->refcount);
|
||||
kref_init(&fe->refcount);
|
||||
|
||||
/*
|
||||
* After initialization, there need to be two references: one
|
||||
* for dvb_unregister_frontend(), and another one for
|
||||
* dvb_frontend_detach().
|
||||
*/
|
||||
dvb_frontend_get(fe);
|
||||
|
||||
sema_init(&fepriv->sem, 1);
|
||||
init_waitqueue_head (&fepriv->wait_queue);
|
||||
|
@ -2720,50 +2736,33 @@ int dvb_unregister_frontend(struct dvb_frontend* fe)
|
|||
dev_dbg(fe->dvb->device, "%s:\n", __func__);
|
||||
|
||||
mutex_lock(&frontend_mutex);
|
||||
dvb_frontend_stop (fe);
|
||||
dvb_unregister_device (fepriv->dvbdev);
|
||||
dvb_frontend_stop(fe);
|
||||
dvb_remove_device(fepriv->dvbdev);
|
||||
|
||||
/* fe is invalid now */
|
||||
mutex_unlock(&frontend_mutex);
|
||||
dvb_frontend_private_put(fepriv);
|
||||
dvb_frontend_put(fe);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(dvb_unregister_frontend);
|
||||
|
||||
static void dvb_frontend_invoke_release(struct dvb_frontend *fe,
|
||||
void (*release)(struct dvb_frontend *fe))
|
||||
{
|
||||
if (release) {
|
||||
release(fe);
|
||||
#ifdef CONFIG_MEDIA_ATTACH
|
||||
void dvb_frontend_detach(struct dvb_frontend* fe)
|
||||
{
|
||||
void *ptr;
|
||||
|
||||
if (fe->ops.release_sec) {
|
||||
fe->ops.release_sec(fe);
|
||||
dvb_detach(fe->ops.release_sec);
|
||||
}
|
||||
if (fe->ops.tuner_ops.release) {
|
||||
fe->ops.tuner_ops.release(fe);
|
||||
dvb_detach(fe->ops.tuner_ops.release);
|
||||
}
|
||||
if (fe->ops.analog_ops.release) {
|
||||
fe->ops.analog_ops.release(fe);
|
||||
dvb_detach(fe->ops.analog_ops.release);
|
||||
}
|
||||
ptr = (void*)fe->ops.release;
|
||||
if (ptr) {
|
||||
fe->ops.release(fe);
|
||||
dvb_detach(ptr);
|
||||
}
|
||||
}
|
||||
#else
|
||||
void dvb_frontend_detach(struct dvb_frontend* fe)
|
||||
{
|
||||
if (fe->ops.release_sec)
|
||||
fe->ops.release_sec(fe);
|
||||
if (fe->ops.tuner_ops.release)
|
||||
fe->ops.tuner_ops.release(fe);
|
||||
if (fe->ops.analog_ops.release)
|
||||
fe->ops.analog_ops.release(fe);
|
||||
if (fe->ops.release)
|
||||
fe->ops.release(fe);
|
||||
}
|
||||
dvb_detach(release);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void dvb_frontend_detach(struct dvb_frontend* fe)
|
||||
{
|
||||
dvb_frontend_invoke_release(fe, fe->ops.release_sec);
|
||||
dvb_frontend_invoke_release(fe, fe->ops.tuner_ops.release);
|
||||
dvb_frontend_invoke_release(fe, fe->ops.analog_ops.release);
|
||||
dvb_frontend_invoke_release(fe, fe->ops.detach);
|
||||
dvb_frontend_put(fe);
|
||||
}
|
||||
EXPORT_SYMBOL(dvb_frontend_detach);
|
||||
|
|
|
@ -225,7 +225,7 @@ struct dvb_tuner_ops {
|
|||
|
||||
struct dvb_tuner_info info;
|
||||
|
||||
int (*release)(struct dvb_frontend *fe);
|
||||
void (*release)(struct dvb_frontend *fe);
|
||||
int (*init)(struct dvb_frontend *fe);
|
||||
int (*sleep)(struct dvb_frontend *fe);
|
||||
int (*suspend)(struct dvb_frontend *fe);
|
||||
|
@ -323,7 +323,11 @@ struct dtv_frontend_properties;
|
|||
*
|
||||
* @info: embedded struct dvb_tuner_info with tuner properties
|
||||
* @delsys: Delivery systems supported by the frontend
|
||||
* @release: callback function called when frontend is dettached.
|
||||
* @detach: callback function called when frontend is detached.
|
||||
* drivers should clean up, but not yet free the struct
|
||||
* dvb_frontend allocation.
|
||||
* @release: callback function called when frontend is ready to be
|
||||
* freed.
|
||||
* drivers should free any allocated memory.
|
||||
* @release_sec: callback function requesting that the Satelite Equipment
|
||||
* Control (SEC) driver to release and free any memory
|
||||
|
@ -408,6 +412,7 @@ struct dvb_frontend_ops {
|
|||
|
||||
u8 delsys[MAX_DELSYS];
|
||||
|
||||
void (*detach)(struct dvb_frontend *fe);
|
||||
void (*release)(struct dvb_frontend* fe);
|
||||
void (*release_sec)(struct dvb_frontend* fe);
|
||||
|
||||
|
@ -655,6 +660,7 @@ struct dtv_frontend_properties {
|
|||
*/
|
||||
|
||||
struct dvb_frontend {
|
||||
struct kref refcount;
|
||||
struct dvb_frontend_ops ops;
|
||||
struct dvb_adapter *dvb;
|
||||
void *demodulator_priv;
|
||||
|
|
|
@ -21,6 +21,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "dvbdev: " fmt
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/string.h>
|
||||
|
@ -43,7 +45,11 @@ static int dvbdev_debug;
|
|||
module_param(dvbdev_debug, int, 0644);
|
||||
MODULE_PARM_DESC(dvbdev_debug, "Turn on/off device debugging (default:off).");
|
||||
|
||||
#define dprintk if (dvbdev_debug) printk
|
||||
#define dprintk(fmt, arg...) do { \
|
||||
if (dvbdev_debug) \
|
||||
printk(KERN_DEBUG pr_fmt("%s: " fmt), \
|
||||
__func__, ##arg); \
|
||||
} while (0)
|
||||
|
||||
static LIST_HEAD(dvb_adapter_list);
|
||||
static DEFINE_MUTEX(dvbdev_register_lock);
|
||||
|
@ -354,7 +360,7 @@ static int dvb_create_media_entity(struct dvb_device *dvbdev,
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
printk(KERN_DEBUG "%s: media entity '%s' registered.\n",
|
||||
pr_info("%s: media entity '%s' registered.\n",
|
||||
__func__, dvbdev->entity->name);
|
||||
|
||||
return 0;
|
||||
|
@ -438,7 +444,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
|
|||
if ((id = dvbdev_get_free_id (adap, type)) < 0){
|
||||
mutex_unlock(&dvbdev_register_lock);
|
||||
*pdvbdev = NULL;
|
||||
printk(KERN_ERR "%s: couldn't find free device id\n", __func__);
|
||||
pr_err("%s: couldn't find free device id\n", __func__);
|
||||
return -ENFILE;
|
||||
}
|
||||
|
||||
|
@ -493,8 +499,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
|
|||
|
||||
ret = dvb_register_media_device(dvbdev, type, minor, demux_sink_pads);
|
||||
if (ret) {
|
||||
printk(KERN_ERR
|
||||
"%s: dvb_register_media_device failed to create the mediagraph\n",
|
||||
pr_err("%s: dvb_register_media_device failed to create the mediagraph\n",
|
||||
__func__);
|
||||
|
||||
dvb_media_device_free(dvbdev);
|
||||
|
@ -511,11 +516,11 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
|
|||
MKDEV(DVB_MAJOR, minor),
|
||||
dvbdev, "dvb%d.%s%d", adap->num, dnames[type], id);
|
||||
if (IS_ERR(clsdev)) {
|
||||
printk(KERN_ERR "%s: failed to create device dvb%d.%s%d (%ld)\n",
|
||||
pr_err("%s: failed to create device dvb%d.%s%d (%ld)\n",
|
||||
__func__, adap->num, dnames[type], id, PTR_ERR(clsdev));
|
||||
return PTR_ERR(clsdev);
|
||||
}
|
||||
dprintk(KERN_DEBUG "DVB: register adapter%d/%s%d @ minor: %i (0x%02x)\n",
|
||||
dprintk("DVB: register adapter%d/%s%d @ minor: %i (0x%02x)\n",
|
||||
adap->num, dnames[type], id, minor, minor);
|
||||
|
||||
return 0;
|
||||
|
@ -523,7 +528,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
|
|||
EXPORT_SYMBOL(dvb_register_device);
|
||||
|
||||
|
||||
void dvb_unregister_device(struct dvb_device *dvbdev)
|
||||
void dvb_remove_device(struct dvb_device *dvbdev)
|
||||
{
|
||||
if (!dvbdev)
|
||||
return;
|
||||
|
@ -537,9 +542,26 @@ void dvb_unregister_device(struct dvb_device *dvbdev)
|
|||
device_destroy(dvb_class, MKDEV(DVB_MAJOR, dvbdev->minor));
|
||||
|
||||
list_del (&dvbdev->list_head);
|
||||
}
|
||||
EXPORT_SYMBOL(dvb_remove_device);
|
||||
|
||||
|
||||
void dvb_free_device(struct dvb_device *dvbdev)
|
||||
{
|
||||
if (!dvbdev)
|
||||
return;
|
||||
|
||||
kfree (dvbdev->fops);
|
||||
kfree (dvbdev);
|
||||
}
|
||||
EXPORT_SYMBOL(dvb_free_device);
|
||||
|
||||
|
||||
void dvb_unregister_device(struct dvb_device *dvbdev)
|
||||
{
|
||||
dvb_remove_device(dvbdev);
|
||||
dvb_free_device(dvbdev);
|
||||
}
|
||||
EXPORT_SYMBOL(dvb_unregister_device);
|
||||
|
||||
|
||||
|
@ -808,7 +830,7 @@ int dvb_register_adapter(struct dvb_adapter *adap, const char *name,
|
|||
memset (adap, 0, sizeof(struct dvb_adapter));
|
||||
INIT_LIST_HEAD (&adap->device_list);
|
||||
|
||||
printk(KERN_INFO "DVB: registering new adapter (%s)\n", name);
|
||||
pr_info("DVB: registering new adapter (%s)\n", name);
|
||||
|
||||
adap->num = num;
|
||||
adap->name = name;
|
||||
|
@ -926,13 +948,13 @@ static int __init init_dvbdev(void)
|
|||
dev_t dev = MKDEV(DVB_MAJOR, 0);
|
||||
|
||||
if ((retval = register_chrdev_region(dev, MAX_DVB_MINORS, "DVB")) != 0) {
|
||||
printk(KERN_ERR "dvb-core: unable to get major %d\n", DVB_MAJOR);
|
||||
pr_err("dvb-core: unable to get major %d\n", DVB_MAJOR);
|
||||
return retval;
|
||||
}
|
||||
|
||||
cdev_init(&dvb_device_cdev, &dvb_device_fops);
|
||||
if ((retval = cdev_add(&dvb_device_cdev, dev, MAX_DVB_MINORS)) != 0) {
|
||||
printk(KERN_ERR "dvb-core: unable register character device\n");
|
||||
pr_err("dvb-core: unable register character device\n");
|
||||
goto error;
|
||||
}
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
#if defined(CONFIG_DVB_MAX_ADAPTERS) && CONFIG_DVB_MAX_ADAPTERS > 0
|
||||
#define DVB_MAX_ADAPTERS CONFIG_DVB_MAX_ADAPTERS
|
||||
#else
|
||||
#define DVB_MAX_ADAPTERS 8
|
||||
#define DVB_MAX_ADAPTERS 16
|
||||
#endif
|
||||
|
||||
#define DVB_UNSET (-1)
|
||||
|
@ -211,9 +211,32 @@ int dvb_register_device(struct dvb_adapter *adap,
|
|||
int type,
|
||||
int demux_sink_pads);
|
||||
|
||||
/**
|
||||
* dvb_remove_device - Remove a registered DVB device
|
||||
*
|
||||
* This does not free memory. To do that, call dvb_free_device().
|
||||
*
|
||||
* @dvbdev: pointer to struct dvb_device
|
||||
*/
|
||||
void dvb_remove_device(struct dvb_device *dvbdev);
|
||||
|
||||
/**
|
||||
* dvb_free_device - Free memory occupied by a DVB device.
|
||||
*
|
||||
* Call dvb_unregister_device() before calling this function.
|
||||
*
|
||||
* @dvbdev: pointer to struct dvb_device
|
||||
*/
|
||||
void dvb_free_device(struct dvb_device *dvbdev);
|
||||
|
||||
/**
|
||||
* dvb_unregister_device - Unregisters a DVB device
|
||||
*
|
||||
* This is a combination of dvb_remove_device() and dvb_free_device().
|
||||
* Using this function is usually a mistake, and is often an indicator
|
||||
* for a use-after-free bug (when a userspace process keeps a file
|
||||
* handle to a detached device).
|
||||
*
|
||||
* @dvbdev: pointer to struct dvb_device
|
||||
*/
|
||||
void dvb_unregister_device(struct dvb_device *dvbdev);
|
||||
|
|
|
@ -642,7 +642,7 @@ config DVB_S5H1409
|
|||
to support this frontend.
|
||||
|
||||
config DVB_AU8522
|
||||
depends on I2C
|
||||
depends on DVB_CORE && I2C
|
||||
tristate
|
||||
|
||||
config DVB_AU8522_DTV
|
||||
|
@ -656,7 +656,7 @@ config DVB_AU8522_DTV
|
|||
|
||||
config DVB_AU8522_V4L
|
||||
tristate "Auvitek AU8522 based ATV demod"
|
||||
depends on VIDEO_V4L2 && I2C
|
||||
depends on VIDEO_V4L2 && DVB_CORE && I2C
|
||||
select DVB_AU8522
|
||||
default m if !MEDIA_SUBDRV_AUTOSELECT
|
||||
help
|
||||
|
@ -722,7 +722,7 @@ config DVB_PLL
|
|||
|
||||
config DVB_TUNER_DIB0070
|
||||
tristate "DiBcom DiB0070 silicon base-band tuner"
|
||||
depends on I2C
|
||||
depends on DVB_CORE && I2C
|
||||
default m if !MEDIA_SUBDRV_AUTOSELECT
|
||||
help
|
||||
A driver for the silicon baseband tuner DiB0070 from DiBcom.
|
||||
|
@ -731,7 +731,7 @@ config DVB_TUNER_DIB0070
|
|||
|
||||
config DVB_TUNER_DIB0090
|
||||
tristate "DiBcom DiB0090 silicon base-band tuner"
|
||||
depends on I2C
|
||||
depends on DVB_CORE && I2C
|
||||
default m if !MEDIA_SUBDRV_AUTOSELECT
|
||||
help
|
||||
A driver for the silicon baseband tuner DiB0090 from DiBcom.
|
||||
|
@ -879,5 +879,6 @@ comment "Tools to develop new frontends"
|
|||
|
||||
config DVB_DUMMY_FE
|
||||
tristate "Dummy frontend driver"
|
||||
depends on DVB_CORE
|
||||
default n
|
||||
endmenu
|
||||
|
|
|
@ -1351,7 +1351,7 @@ static void af9013_release(struct dvb_frontend *fe)
|
|||
kfree(state);
|
||||
}
|
||||
|
||||
static struct dvb_frontend_ops af9013_ops;
|
||||
static const struct dvb_frontend_ops af9013_ops;
|
||||
|
||||
static int af9013_download_firmware(struct af9013_state *state)
|
||||
{
|
||||
|
@ -1516,7 +1516,7 @@ struct dvb_frontend *af9013_attach(const struct af9013_config *config,
|
|||
}
|
||||
EXPORT_SYMBOL(af9013_attach);
|
||||
|
||||
static struct dvb_frontend_ops af9013_ops = {
|
||||
static const struct dvb_frontend_ops af9013_ops = {
|
||||
.delsys = { SYS_DVBT },
|
||||
.info = {
|
||||
.name = "Afatech AF9013",
|
||||
|
|
|
@ -1198,7 +1198,7 @@ static int af9033_pid_filter(struct dvb_frontend *fe, int index, u16 pid,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static struct dvb_frontend_ops af9033_ops = {
|
||||
static const struct dvb_frontend_ops af9033_ops = {
|
||||
.delsys = { SYS_DVBT },
|
||||
.info = {
|
||||
.name = "Afatech AF9033 (DVB-T)",
|
||||
|
|
|
@ -415,7 +415,7 @@ static void as102_fe_release(struct dvb_frontend *fe)
|
|||
}
|
||||
|
||||
|
||||
static struct dvb_frontend_ops as102_fe_ops = {
|
||||
static const struct dvb_frontend_ops as102_fe_ops = {
|
||||
.delsys = { SYS_DVBT },
|
||||
.info = {
|
||||
.name = "Abilis AS102 DVB-T",
|
||||
|
|
|
@ -254,14 +254,13 @@ static int ascot2e_init(struct dvb_frontend *fe)
|
|||
return ascot2e_leave_power_save(priv);
|
||||
}
|
||||
|
||||
static int ascot2e_release(struct dvb_frontend *fe)
|
||||
static void ascot2e_release(struct dvb_frontend *fe)
|
||||
{
|
||||
struct ascot2e_priv *priv = fe->tuner_priv;
|
||||
|
||||
dev_dbg(&priv->i2c->dev, "%s()\n", __func__);
|
||||
kfree(fe->tuner_priv);
|
||||
fe->tuner_priv = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ascot2e_sleep(struct dvb_frontend *fe)
|
||||
|
|
|
@ -428,7 +428,7 @@ static int atbm8830_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)
|
|||
return atbm8830_write_reg(priv, REG_I2C_GATE, enable ? 1 : 0);
|
||||
}
|
||||
|
||||
static struct dvb_frontend_ops atbm8830_ops = {
|
||||
static const struct dvb_frontend_ops atbm8830_ops = {
|
||||
.delsys = { SYS_DTMB },
|
||||
.info = {
|
||||
.name = "AltoBeam ATBM8830/8831 DMB-TH",
|
||||
|
|
|
@ -50,8 +50,8 @@ int au8522_writereg(struct au8522_state *state, u16 reg, u8 data)
|
|||
ret = i2c_transfer(state->i2c, &msg, 1);
|
||||
|
||||
if (ret != 1)
|
||||
printk("%s: writereg error (reg == 0x%02x, val == 0x%04x, "
|
||||
"ret == %i)\n", __func__, reg, data, ret);
|
||||
printk("%s: writereg error (reg == 0x%02x, val == 0x%04x, ret == %i)\n",
|
||||
__func__, reg, data, ret);
|
||||
|
||||
return (ret != 1) ? -1 : 0;
|
||||
}
|
||||
|
|
|
@ -834,7 +834,7 @@ static int au8522_get_tune_settings(struct dvb_frontend *fe,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static struct dvb_frontend_ops au8522_ops;
|
||||
static const struct dvb_frontend_ops au8522_ops;
|
||||
|
||||
|
||||
static void au8522_release(struct dvb_frontend *fe)
|
||||
|
@ -894,7 +894,7 @@ struct dvb_frontend *au8522_attach(const struct au8522_config *config,
|
|||
}
|
||||
EXPORT_SYMBOL(au8522_attach);
|
||||
|
||||
static struct dvb_frontend_ops au8522_ops = {
|
||||
static const struct dvb_frontend_ops au8522_ops = {
|
||||
.delsys = { SYS_ATSC, SYS_DVBC_ANNEX_B },
|
||||
.info = {
|
||||
.name = "Auvitek AU8522 QAM/8VSB Frontend",
|
||||
|
|
|
@ -788,7 +788,7 @@ static int bcm3510_init(struct dvb_frontend* fe)
|
|||
}
|
||||
|
||||
|
||||
static struct dvb_frontend_ops bcm3510_ops;
|
||||
static const struct dvb_frontend_ops bcm3510_ops;
|
||||
|
||||
struct dvb_frontend* bcm3510_attach(const struct bcm3510_config *config,
|
||||
struct i2c_adapter *i2c)
|
||||
|
@ -834,7 +834,7 @@ struct dvb_frontend* bcm3510_attach(const struct bcm3510_config *config,
|
|||
}
|
||||
EXPORT_SYMBOL(bcm3510_attach);
|
||||
|
||||
static struct dvb_frontend_ops bcm3510_ops = {
|
||||
static const struct dvb_frontend_ops bcm3510_ops = {
|
||||
.delsys = { SYS_ATSC, SYS_DVBC_ANNEX_B },
|
||||
.info = {
|
||||
.name = "Broadcom BCM3510 VSB/QAM frontend",
|
||||
|
|
|
@ -380,7 +380,7 @@ static void cx22700_release(struct dvb_frontend* fe)
|
|||
kfree(state);
|
||||
}
|
||||
|
||||
static struct dvb_frontend_ops cx22700_ops;
|
||||
static const struct dvb_frontend_ops cx22700_ops;
|
||||
|
||||
struct dvb_frontend* cx22700_attach(const struct cx22700_config* config,
|
||||
struct i2c_adapter* i2c)
|
||||
|
@ -408,7 +408,7 @@ struct dvb_frontend* cx22700_attach(const struct cx22700_config* config,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static struct dvb_frontend_ops cx22700_ops = {
|
||||
static const struct dvb_frontend_ops cx22700_ops = {
|
||||
.delsys = { SYS_DVBT },
|
||||
.info = {
|
||||
.name = "Conexant CX22700 DVB-T",
|
||||
|
|
|
@ -120,8 +120,8 @@ static int cx24110_writereg (struct cx24110_state* state, int reg, int data)
|
|||
int err;
|
||||
|
||||
if ((err = i2c_transfer(state->i2c, &msg, 1)) != 1) {
|
||||
dprintk ("%s: writereg error (err == %i, reg == 0x%02x,"
|
||||
" data == 0x%02x)\n", __func__, err, reg, data);
|
||||
dprintk("%s: writereg error (err == %i, reg == 0x%02x, data == 0x%02x)\n",
|
||||
__func__, err, reg, data);
|
||||
return -EREMOTEIO;
|
||||
}
|
||||
|
||||
|
@ -592,7 +592,7 @@ static void cx24110_release(struct dvb_frontend* fe)
|
|||
kfree(state);
|
||||
}
|
||||
|
||||
static struct dvb_frontend_ops cx24110_ops;
|
||||
static const struct dvb_frontend_ops cx24110_ops;
|
||||
|
||||
struct dvb_frontend* cx24110_attach(const struct cx24110_config* config,
|
||||
struct i2c_adapter* i2c)
|
||||
|
@ -625,7 +625,7 @@ struct dvb_frontend* cx24110_attach(const struct cx24110_config* config,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static struct dvb_frontend_ops cx24110_ops = {
|
||||
static const struct dvb_frontend_ops cx24110_ops = {
|
||||
.delsys = { SYS_DVBS },
|
||||
.info = {
|
||||
.name = "Conexant CX24110 DVB-S",
|
||||
|
|
|
@ -108,8 +108,8 @@ static int cx24113_writereg(struct cx24113_state *state, int reg, int data)
|
|||
.flags = 0, .buf = buf, .len = 2 };
|
||||
int err = i2c_transfer(state->i2c, &msg, 1);
|
||||
if (err != 1) {
|
||||
printk(KERN_DEBUG "%s: writereg error(err == %i, reg == 0x%02x,"
|
||||
" data == 0x%02x)\n", __func__, err, reg, data);
|
||||
printk(KERN_DEBUG "%s: writereg error(err == %i, reg == 0x%02x, data == 0x%02x)\n",
|
||||
__func__, err, reg, data);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -527,13 +527,12 @@ static int cx24113_get_frequency(struct dvb_frontend *fe, u32 *frequency)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int cx24113_release(struct dvb_frontend *fe)
|
||||
static void cx24113_release(struct dvb_frontend *fe)
|
||||
{
|
||||
struct cx24113_state *state = fe->tuner_priv;
|
||||
dprintk("\n");
|
||||
fe->tuner_priv = NULL;
|
||||
kfree(state);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct dvb_tuner_ops cx24113_tuner_ops = {
|
||||
|
|