43 lines
1.9 KiB
ReStructuredText
43 lines
1.9 KiB
ReStructuredText
|
.. Permission is granted to copy, distribute and/or modify this
|
||
|
.. document under the terms of the GNU Free Documentation License,
|
||
|
.. Version 1.1 or any later version published by the Free Software
|
||
|
.. Foundation, with no Invariant Sections, no Front-Cover Texts
|
||
|
.. and no Back-Cover Texts. A copy of the license is included at
|
||
|
.. Documentation/media/uapi/fdl-appendix.rst.
|
||
|
..
|
||
|
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||
|
|
||
|
.. _media-controller-model:
|
||
|
|
||
|
Media device model
|
||
|
==================
|
||
|
|
||
|
Discovering a device internal topology, and configuring it at runtime,
|
||
|
is one of the goals of the media controller API. To achieve this,
|
||
|
hardware devices and Linux Kernel interfaces are modelled as graph
|
||
|
objects on an oriented graph. The object types that constitute the graph
|
||
|
are:
|
||
|
|
||
|
- An **entity** is a basic media hardware or software building block.
|
||
|
It can correspond to a large variety of logical blocks such as
|
||
|
physical hardware devices (CMOS sensor for instance), logical
|
||
|
hardware devices (a building block in a System-on-Chip image
|
||
|
processing pipeline), DMA channels or physical connectors.
|
||
|
|
||
|
- An **interface** is a graph representation of a Linux Kernel
|
||
|
userspace API interface, like a device node or a sysfs file that
|
||
|
controls one or more entities in the graph.
|
||
|
|
||
|
- A **pad** is a data connection endpoint through which an entity can
|
||
|
interact with other entities. Data (not restricted to video) produced
|
||
|
by an entity flows from the entity's output to one or more entity
|
||
|
inputs. Pads should not be confused with physical pins at chip
|
||
|
boundaries.
|
||
|
|
||
|
- A **data link** is a point-to-point oriented connection between two
|
||
|
pads, either on the same entity or on different entities. Data flows
|
||
|
from a source pad to a sink pad.
|
||
|
|
||
|
- An **interface link** is a point-to-point bidirectional control
|
||
|
connection between a Linux Kernel interface and an entity.
|