Commit Graph

60 Commits

Author SHA1 Message Date
Laurent Pinchart
e4d2dcc549 libcamera: media_device: Fallback to legacy ioctls on older kernels
Prior to kernel v4.19, the MEDIA_IOC_G_TOPOLOGY ioctl didn't expose
entity flags. Fallback to calling MEDIA_IOC_ENUM_ENTITIES for each
entity to retrieve the flags in that case.

Fixes: 67d313240c ("libcamera: pipeline: uvcvideo: create a V4L2Device for the default video entity")
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2019-01-26 10:54:43 +02:00
Niklas Söderlund
6013b58fee libcamera: MediaEntity: expose the entity flags
The media entity flags can be useful for pipeline handlers to find the
default device in a media graph which is marked with the
MEDIA_ENT_FL_DEFAULT flag. This will be especially useful for the UVC
pipeline handler where the entity names differ per device.

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2019-01-25 15:14:03 +01:00
Jacopo Mondi
a6c8f58d96 libcamera: pipeline_handler: Add CameraData
Add class definition and methods to associate a Camera with specific data
in the pipeline_handler base class.

Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2019-01-25 14:22:08 +01:00
Jacopo Mondi
987bd370b0 libcamera: v4l2_device: Identify multiplanar formats
Add functions to V4L2Capability to identify if a V4L2 device supports
multiplanar V4L2 APIs.

Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2019-01-25 14:04:41 +01:00
Laurent Pinchart
0052aaa40e libcamera: device_enumerator: Add hotplug support
Create a udev_monitor in the udev device enumerator to listen to media
device disconnection, and emit the corresponding media device's
disconnect signal in response.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2019-01-25 01:59:29 +02:00
Niklas Söderlund
607a9d7f56 libcamera: pipeline_handler: Add camera disconnection support
Pipeline handlers are responsible for creating camera instances, but
also for destroying them when devices are unplugged. As camera objects
are reference-counted this isn't a straightforward operation and
involves the camera manager and camera object itself. Add two helper
methods in the PipelineHandler base class to register a camera and to
register a media device with the pipeline handler.

When registering a camera, the registerCamera() helper method will add
it to the camera manager. When registering a media device, the
registerMediaDevice() helper method will listen to device disconnection
events, and disconnect all cameras created by the pipeline handler as a
response.

Under the hood the PipelineHandler class needs to keep track of
registered cameras in order to handle disconnection. They can't be
stored as shared pointers as this would create a circular dependency
(the Camera class owns a shared pointer to the pipeline handler). Store
them as weak pointers instead. This is safe as a reference to the camera
is stored in the camera manager, and doesn't get removed until the
camera is unregistered from the manager by the PipelineHandler.

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2019-01-25 01:59:28 +02:00
Laurent Pinchart
9d29af143b libcamera: media_device: Add disconnected signal
The signal is emitted when the hardware device corresponding to the
media device is unplugged. This will trigger the full unplug handling
chain.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2019-01-24 22:24:13 +02:00
Laurent Pinchart
4f043b05e7 libcamera: device_enumerator: Reference-count MediaDevice instances
The MediaDevice class will be the entry point to hot-unplug, as it
corresponds to the kernel devices that will report device removal
events. The class will signal media device disconnection to pipeline
handlers, which will clean up resources as a result.

This can't be performed synchronously as references may exist to the
related Camera objects in applications. The MediaDevice object thus
needs to be reference-counted in order to support unplugging, as
otherwise pipeline handlers would be required to drop all the references
to the media device they have borrowed synchronously with the
disconnection signal handler, which would be very error prone (if even
possible at all in a sane way).

Handle MedieDevice instances with std::shared_ptr<> to support this.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2019-01-24 22:24:11 +02:00
Niklas Söderlund
5b02e03199 libcamera: camera: Associate cameras with their pipeline handler
The PipelineHandler which creates a Camera is responsible for serving
any operation requested by the user. In order forward the public API
calls, the camera needs to store a reference to its pipeline handler.

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
Changes since v1:

- Create pipeline handlers is shared pointers, make them inherit from
  std::enable_shared_from_this<> and stored them in shared pointers.
2019-01-24 22:24:11 +02:00
Laurent Pinchart
a29b7fc7d5 libcamera: pipeline_handler: Declare factory children classes as final
Nothing should inherit from the factory classes created by the
REGISTER_PIPELINE_HANDLER() macro. Declare them as final instead of only
declaring their create() method final.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2019-01-24 22:24:08 +02:00
Laurent Pinchart
e597598abf libcamera: pipeline_handler: Store the camera manager pointer
Instead of passing the camera manager pointer to the match() function,
and later to more PipelineHandler functions, store it in the
PipelineHandler::manager_ member variable at construction time and
access it from there.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2019-01-24 22:24:02 +02:00
Laurent Pinchart
4d470eb37f libcamera: event_dispatcher: Add interrupt() function
The new interrupt() function allows interrupting in-progress blocking
processEvents() calls. This is useful to stop running event loops.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2019-01-23 18:51:56 +02:00
Laurent Pinchart
d370c1b46e libcamera: event_dispatcher_poll: Handle interrupted ppoll() calls
The ppoll() call can be interrupted if a signal is delivered. Handle the
EINTR error code gracefully by restarting the call. This fixes the
event-dispatcher test failure.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2019-01-23 18:51:56 +02:00
Niklas Söderlund
d32dc0c1c8 libcamera: fix odd include file hierarchy
There is no need for pipeline_handler.h to include camera.h, instead it
should be included in the source file which needs it;
camera_manager.cpp.

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2019-01-23 16:59:12 +01:00
Kieran Bingham
e5163f54d4 libcamera: v4l2device: Obtain device capabilities
The capabilities structure from the kernel can return capabilities of the
driver, or potentially more specific device capabilities.

Handle this with an inline function 'device_caps()' to return the device
specific capabilities when available, or fall back to the driver capabilities
otherwise.

Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2019-01-23 14:33:34 +00:00
Niklas Söderlund
5db44e6da7 libcamera: media_device: expose media graph model name
Pipeline handlers such as the upcoming ucvideo handler need the model
name to properly name the Camera objects they create. Store the model
name when querying the media device info and handle it in a similar
fashion as the driver name which is already retrieved.

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2019-01-22 14:54:20 +01:00
Jacopo Mondi
1af83ca6df libcamera: Global s/devnode/deviceNode rename
Do not use the abreviated version for members, variables and getter
methods.

Library-wise rename, no intended functional changes.

Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2019-01-22 14:14:04 +01:00
Jacopo Mondi
d18d25bde3 libcamera: v4l2_device: Add MediaEntity contructor
Construct a V4L2Device from a MediaEntity device node path. While at
there mark constructor as explicit to avoid copy-construction.

Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2019-01-22 14:14:04 +01:00
Laurent Pinchart
63675b6dcf libcamera: log: Add log categories
Log categories are used to group log messages by topic. Introduce
support for categories by making the LOG() macro variadic. Support for
configuring log level per category will be introduced in a subsequent
commit.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2019-01-21 21:47:17 +02:00
Jacopo Mondi
5c85ef5883 libcamera: media_object: Set devnode in MediaEntity
The MediaEntity::setDeviceNode() function was designed to set the device
node path associated with a MediaEntity. The function was there, but the
devnode_ member field was never actually set. Fix this.

While at there add a getter method for the devnode_ member as it will
soon be used.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2019-01-21 11:35:44 +01:00
Jacopo Mondi
ec53057f0a libcamera: media_object: Add functions to entities
Media entities convey information about their main function in the
'function' field of 'struct media_v2_entity'.

Store the main function in the MediaEntity function_ class member and provide
a getter function for that.

While at there update comments, keep the MediaPad description in sync
with the MediaEntity one and remove a stale TODO entry.

Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2019-01-21 11:35:30 +01:00
Laurent Pinchart
f3695e9b09 libcamera: camera_manager: Register cameras with the camera manager
Cameras are listed through a double indirection, first iterating over
all available pipeline handlers, and then listing the cameras they each
support. To simplify the API make the pipeline handlers register the
cameras with the camera manager directly, which lets the camera manager
easily expose the list of all available cameras.

The PipelineHandler API gets simplified as the handlers don't need to
expose the list of cameras they have created.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2019-01-21 11:13:49 +02:00
Laurent Pinchart
576c9454cf libcamera: utils: Don't use C++17 nested namespaces
Nesting namespace names in a single namespace declaration is a C++17
feature. As libcamera depends on C++11 only, nest two separate namespace
declarations instead.

Reported-by: Shik Chen <shik@google.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2019-01-19 00:52:15 +02:00
Kieran Bingham
e74f3eebb4 libcamera: Add V4L2 Device object
Provide a helper V4L2 device object capable of interacting with the
V4L2 Linux Kernel APIs.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2019-01-17 21:55:21 +00:00
Kieran Bingham
d67841a990 libcamera: log: Fix coding style warnings
The checkstyle utility highlights some minor warnings against the logger
implementation.

Fix these up.

Fixes: edbd2059d8 ("libcamera: Add initial logger")
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2019-01-17 21:31:33 +00:00
Laurent Pinchart
62eae99ed2 libcamera: camera_manager: Turn enumerator into a unique_ptr<>
Convey the fact that the CameraManager class owns the DeviceEnumerator
instance it creates by using std::unique_ptr<> to store the pointer.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2019-01-16 18:23:43 +02:00
Laurent Pinchart
a2f095947f libcamera: utils: Implement C++14 make_unique<>()
C++14 introduces std::make_unique<>() that makes it easier to initialize
unique_ptr<> instances. As libcamera is limited to C++11, implement our
own version of the function in the libcamera::utils namespace.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2019-01-16 18:23:43 +02:00
Laurent Pinchart
f388aa7041 libcamera: device_enumerator: Don't mark the search() function as const
While the DeviceEnumerator::search() function doesn't modify the
instance directly, it returns a non-const pointer to a MediaEntity that
is owned by the DeviceEnumerator instance. This breaks the const
semantics. Don't mark the function as const.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2019-01-16 18:23:43 +02:00
Laurent Pinchart
3e6090a17a libcamera: event_dispatcher_poll: Constify argument to processNotifiers
The EventDispatcherPoll::processNotifiers() function doesn't modify the
argument it receives, make it const.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2019-01-16 18:23:43 +02:00
Laurent Pinchart
6ee4050182 libcamera: pipeline_handler: Rename handlers() method to factories()
The PipelineHandlerFactory::handlers() static method returns a list of
factories, not a list of handlers. Rename it accordingly.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2019-01-16 18:23:43 +02:00
Laurent Pinchart
34018d23d7 libcamera: pipeline_handler: Don't index factories by name
Pipeline handler factories are register in a map indexed by their name,
and the list of names is used to expose the factories and look them up.
This is unnecessary cumbersome, we can instead store factories in a
vector and expose it directly. The pipeline factory users will still
have access to the factory names through the factory name() function.

The PipelineHandlerFactory::create() method becomes so simple that it
can be inlined in its single caller, removing the unneeded usage of the
DeviceEnumerator in the factory.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2019-01-16 18:23:42 +02:00
Jacopo Mondi
4e78147df9 libcamera: Add link handling functions
Add a function to the MediaLink class to set the state of a link to
enabled or disabled. The function makes use of an internal MediaDevice
method, which is defined private and only accessible by the MediaLink
setEnabled() function itself.

Also add to MediaDevice a function to reset all links registered in the
media graph.

Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2019-01-09 09:16:47 +01:00
Jacopo Mondi
b65feafe32 libcamera: media_device: Add functions to get a MediaLink
Add three overloaded functions 'link()' to retrieve a link between two
pads. Each overloaded implementation exposes a different method to
identify the source and sink pads.

Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2019-01-08 21:38:42 +01:00
Jacopo Mondi
6275a14215 libcamera: Add pointer to MediaDevice to MediaObject
Add a MediaDevice member field to the MediaObject class hierarcy.
Each media object now has a reference to the media device it belongs to,
and which it has been created by.

Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2019-01-08 21:38:40 +01:00
Laurent Pinchart
8356f8a6ab libcamera: Add a poll-based event dispatcher
Provide a poll-based event dispatcher implementation as convenience for
applications that don't need a custom event loop. The poll-based
dispatcher is automatically instantiated if the application doesn't
provide its own dispatcher.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2019-01-08 16:23:16 +02:00
Laurent Pinchart
ce24c052de libcamera: log: Add an ASSERT macro
The ASSERT() macro is similar to the assert() macro defined by the C
standard, but uses the libcamera logging infrastructure.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2019-01-08 16:23:16 +02:00
Laurent Pinchart
99a3e7bcfb libcamera: log: Add a LogFatal log level
The LogFatal log level is similar to the LogError level, but
additionally abort program execution. This is useful to implement
assertion handlers.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2019-01-08 16:23:16 +02:00
Kieran Bingham
eda3cfa1e3 libcamera: media_object: Rename major/minor functions
The system libraries define macro's for major/minor through
<sys/types.h> on some versions of GCC/GLibc.

To prevent namespace collisions with these macros, rename our major and
minor device node accessors.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2019-01-08 13:14:29 +00:00
Laurent Pinchart
2d73fd9eca libcamera: pipeline_handler: Remove unneeded forward declaration
There's no need to forward-declare the PipelineManagerFactory class.
Remove it.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2019-01-04 00:23:32 +02:00
Laurent Pinchart
a87cb586e2 libcamera: device_enumerator: Constify argument to search function
The DeviceEnumerator::search() function doesn't need to modify its
DeviceMatch argument, make it const.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2019-01-04 00:23:29 +02:00
Laurent Pinchart
9f5d6ee69f libcamera: device_enumerator: Fix indentation
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2019-01-04 00:23:24 +02:00
Jacopo Mondi
1b80471805 libcamera: media_device: Make getEntityByName() const
The function does not modify the instance state. Mark it as const.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2019-01-02 12:21:45 +01:00
Jacopo Mondi
d83269aae0 libcamera: device_enumerator: Use MediaDevice
Replace usage of the DeviceInfo class with MediaDevice in the
DeviceEnumerator and remove the DeviceInfo class.

Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2019-01-02 12:59:04 +02:00
Jacopo Mondi
d4af90d729 libcamera: media_device: Create entities with major and minor numbers
Extend the MediaEntity object with device node major and minor numbers,
and retrieve them from the media graph using interfaces. They will be
used by the DeviceEnumerator to retrieve the devnode path.

Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2019-01-02 12:53:55 +02:00
Jacopo Mondi
14291e50b7 libcamera: media_device: Add DeviceInfo features
Add the features of the DeviceInfo class needed to replace it with
MediaDevice.

Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2019-01-02 12:35:18 +02:00
Laurent Pinchart
a591cc8655 libcamera: mediadevice: Improve documentation
Improve the documentation of the media device operation, including how
it handles the lifetime of media objects.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2019-01-02 02:38:10 +02:00
Laurent Pinchart
492019745d libcamera: mediadevice: Make getEntityByName() public
The function is useful as a public API, make it public.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2019-01-02 02:35:36 +02:00
Laurent Pinchart
67dce611e5 libcamera: mediadevice: Fix graph parsing error handling
Most errors recorded during graph parsing are logged but not propagated
to the caller. Fix this and delete objects that are created but not
successfully added to the graph to avoid memory leaks. As the error code
returned from the addObject() and populate*() functions doesn't matter
much, turn them into bool functions.

Additionally, add a way to query whether the media graph was valid, and
clear objects before populating the graph to avoid leaking them.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2019-01-02 02:35:25 +02:00
Jacopo Mondi
363824662f libcamera: Add MediaDevice class
The MediaDevice object implements handling and configuration of the media
graph associated with a media device.

The class allows enumeration of all pads, links and entities registered in
the media graph.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2018-12-31 19:00:57 +01:00
Jacopo Mondi
f0e16f0389 libcamera: Add MediaObject class hierarchy
Add a class hierarcy to represent all media objects a media graph represents.
Add a base MediaObject class, which retains the global unique object id,
and define the derived MediaEntity, MediaLink and MediaPad classes.

This hierarchy will be used by the MediaDevice objects which represents and
handles the media graph.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2018-12-31 18:56:41 +01:00