The concept of sub-devices
In the early days of the V4L2 subsystem, there were just two main data structures:
struct video_device
: This is the structure through which/dev/<type>X
appears.struct vb2_queue
: This is responsible for buffer management.
This was enough in an era when there were not that many IP blocks embedded with the video bridge. Nowadays, image blocks in SoCs embed so many IP blocks, each of which plays a specific role by offloading specific tasks, such as image resizing, image converting, and video deinterlacing functionalities. In order to use a modular approach for addressing this diversity, the concept of the sub-device has been introduced. This brings a modular approach to the software modeling of the hardware, allowing to abstract each hardware component as a software block.
With this approach, each IP block (except the bridge device) participating in the processing pipe is seen as a sub-device, even the camera sensor itself. Whereas...