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 ...
This commit is contained in:
@@ -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:
|
||||
|
||||
|
19
Documentation/media/uapi/v4l/hsv-formats.rst
Normal file
19
Documentation/media/uapi/v4l/hsv-formats.rst
Normal file
@@ -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.
|
||||
|
157
Documentation/media/uapi/v4l/pixfmt-packed-hsv.rst
Normal file
157
Documentation/media/uapi/v4l/pixfmt-packed-hsv.rst
Normal file
@@ -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: | 크기: 9.4 KiB After Width: | Height: | 크기: 7.9 KiB |
파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
Load Diff
Before Width: | Height: | 크기: 22 KiB After Width: | Height: | 크기: 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: | 크기: 16 KiB After Width: | Height: | 크기: 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}|
|
||||
|
Reference in New Issue
Block a user