Expose default devices
[media-ctl.git] / src / mediactl.h
index 34e7487..b74be0b 100644 (file)
@@ -39,33 +39,8 @@ struct media_pad {
        __u32 padding[3];
 };
 
-struct media_entity {
-       struct media_device *media;
-       struct media_entity_desc info;
-       struct media_pad *pads;
-       struct media_link *links;
-       unsigned int max_links;
-       unsigned int num_links;
-
-       char devname[32];
-       int fd;
-       __u32 padding[6];
-};
-
-struct media_device {
-       int fd;
-       int refcount;
-       char *devnode;
-       struct media_device_info info;
-       struct media_entity *entities;
-       unsigned int entities_count;
-       void (*debug_handler)(void *, ...);
-       void *debug_priv;
-       __u32 padding[6];
-};
-
-#define media_dbg(media, ...) \
-       (media)->debug_handler((media)->debug_priv, __VA_ARGS__)
+struct media_device;
+struct media_entity;
 
 /**
  * @brief Create a new media device.
@@ -143,6 +118,66 @@ int media_device_enumerate(struct media_device *media);
  */
 struct media_pad *media_entity_remote_source(struct media_pad *pad);
 
+/**
+ * @brief Get information about a media entity
+ * @param entity - media entity.
+ *
+ * The information structure is owned by the media entity object and will be
+ * freed when the object is destroyed.
+ *
+ * @return A pointer to the media entity information
+ */
+const struct media_entity_desc *media_entity_get_info(struct media_entity *entity);
+
+/**
+ * @brief Get an entity pad
+ * @param entity - media entity.
+ * @param index - pad index.
+ *
+ * This function returns a pointer to the pad object identified by its index
+ * for the given entity. If the pad index is out of bounds it will return NULL.
+ *
+ * @return A pointer to the pad
+ */
+const struct media_pad *media_entity_get_pad(struct media_entity *entity,
+                                            unsigned int index);
+
+/**
+ * @brief Get the number of links
+ * @param entity - media entity.
+ *
+ * This function returns the total number of links that originate from or arrive
+ * at the the media entity.
+ *
+ * @return The number of links for the entity
+ */
+unsigned int media_entity_get_links_count(struct media_entity *entity);
+
+/**
+ * @brief Get an entity link
+ * @param entity - media entity.
+ * @param index - link index.
+ *
+ * This function returns a pointer to the link object identified by its index
+ * for the given entity. If the link index is out of bounds it will return NULL.
+ *
+ * @return A pointer to the link
+ */
+const struct media_link *media_entity_get_link(struct media_entity *entity,
+                                              unsigned int index);
+
+/**
+ * @brief Get the device node name for an entity
+ * @param entity - media entity.
+ *
+ * This function returns the full path and name to the device node corresponding
+ * to the given entity.
+ *
+ * @return A pointer to the device node name or NULL if the entity has no
+ * associated device node
+ */
+const char *media_entity_get_devname(struct media_entity *entity);
+
 /**
  * @brief Get the type of an entity.
  * @param entity - the entity.
@@ -151,7 +186,7 @@ struct media_pad *media_entity_remote_source(struct media_pad *pad);
  */
 static inline unsigned int media_entity_type(struct media_entity *entity)
 {
-       return entity->info.type & MEDIA_ENT_TYPE_MASK;
+       return media_entity_get_info(entity)->type & MEDIA_ENT_TYPE_MASK;
 }
 
 /**
@@ -183,6 +218,72 @@ struct media_entity *media_get_entity_by_name(struct media_device *media,
 struct media_entity *media_get_entity_by_id(struct media_device *media,
        __u32 id);
 
+/**
+ * @brief Get the number of entities
+ * @param media - media device.
+ *
+ * This function returns the total number of entities in the media device. If
+ * entities haven't been enumerated yet it will return 0.
+ *
+ * @return The number of entities in the media device
+ */
+unsigned int media_get_entities_count(struct media_device *media);
+
+/**
+ * @brief Get the entities
+ * @param media - media device.
+ *
+ * This function returns a pointer to the array of entities for the media
+ * device. If entities haven't been enumerated yet it will return NULL.
+ *
+ * The array of entities is owned by the media device object and will be freed
+ * when the media object is destroyed.
+ *
+ * @return A pointer to an array of entities
+ */
+struct media_entity *media_get_entity(struct media_device *media, unsigned int index);
+
+/**
+ * @brief Get the default entity for a given type
+ * @param media - media device.
+ * @param type - entity type.
+ *
+ * This function returns the default entity of the requested type. @a type must
+ * be one of
+ *
+ *     MEDIA_ENT_T_DEVNODE_V4L
+ *     MEDIA_ENT_T_DEVNODE_FB
+ *     MEDIA_ENT_T_DEVNODE_ALSA
+ *     MEDIA_ENT_T_DEVNODE_DVB
+ *
+ * @return A pointer to the default entity for the type if it exists, or NULL
+ * otherwise.
+ */
+struct media_entity *media_get_default_entity(struct media_device *media,
+                                             unsigned int type);
+
+/**
+ * @brief Get the media device information
+ * @param media - media device.
+ *
+ * The information structure is owned by the media device object and will be freed
+ * when the media object is destroyed.
+ *
+ * @return A pointer to the media device information
+ */
+const struct media_device_info *media_get_info(struct media_device *media);
+
+/**
+ * @brief Get the media device node name
+ * @param media - media device.
+ *
+ * The device node name string is owned by the media device object and will be
+ * freed when the media object is destroyed.
+ *
+ * @return A pointer to the media device node name
+ */
+const char *media_get_devnode(struct media_device *media);
+
 /**
  * @brief Configure a link.
  * @param media - media device.