| .. -*- coding: utf-8; mode: rst -*- |
| |
| .. _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. |