You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
270 lines
8.0 KiB
270 lines
8.0 KiB
/*
|
|
* Media controller interface library
|
|
*
|
|
* Copyright (C) 2010-2011 Ideas on board SPRL
|
|
*
|
|
* Contact: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License as published
|
|
* by the Free Software Foundation; either version 2.1 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef __MEDIA_H__
|
|
#define __MEDIA_H__
|
|
|
|
#include <media.h>
|
|
|
|
#define GAIA_FW_BETA 1
|
|
|
|
#ifndef GAIA_FW_BETA
|
|
#define MEDIA_DEV "/dev/media1" //M5MO : External ISP
|
|
#else
|
|
#define MEDIA_DEV "/dev/media2" //4E5 : Internal ISP
|
|
#endif
|
|
|
|
#define MEDIA_MINOR 0
|
|
|
|
#define KF_MSG 0x1
|
|
#define KF_ANY 0x2
|
|
|
|
struct media_link {
|
|
struct media_pad *source;
|
|
struct media_pad *sink;
|
|
struct media_link *twin;
|
|
__u32 flags;
|
|
__u32 padding[3];
|
|
};
|
|
|
|
struct media_pad {
|
|
struct media_entity *entity;
|
|
__u32 index;
|
|
__u32 flags;
|
|
__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;
|
|
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__)
|
|
|
|
/**
|
|
* @brief Set a handler for debug messages.
|
|
* @param media - device instance.
|
|
* @param debug_handler - debug message handler
|
|
* @param debug_priv - first argument to debug message handler
|
|
*
|
|
* Set a handler for debug messages that will be called whenever
|
|
* debugging information is to be printed. The handler expects an
|
|
* fprintf-like function.
|
|
*/
|
|
void media_debug_set_handler(
|
|
struct media_device *media, void (*debug_handler)(void *, ...),
|
|
void *debug_priv);
|
|
|
|
/**
|
|
* @brief Open a media device with debugging enabled.
|
|
* @param name - name (including path) of the device node.
|
|
* @param debug_handler - debug message handler
|
|
* @param debug_priv - first argument to debug message handler
|
|
*
|
|
* Open the media device referenced by @a name and enumerate entities, pads and
|
|
* links.
|
|
*
|
|
* Calling media_open_debug() instead of media_open() is equivalent to
|
|
* media_open() and media_debug_set_handler() except that debugging is
|
|
* also enabled during media_open().
|
|
*
|
|
* @return A pointer to a newly allocated media_device structure instance on
|
|
* success and NULL on failure. The returned pointer must be freed with
|
|
* media_close when the device isn't needed anymore.
|
|
*/
|
|
struct media_device *media_open_debug(
|
|
const char *name, void (*debug_handler)(void *, ...),
|
|
void *debug_priv);
|
|
|
|
/**
|
|
* @brief Open a media device.
|
|
* @param name - name (including path) of the device node.
|
|
*
|
|
* Open the media device referenced by @a name and enumerate entities, pads and
|
|
* links.
|
|
*
|
|
* @return A pointer to a newly allocated media_device structure instance on
|
|
* success and NULL on failure. The returned pointer must be freed with
|
|
* media_close when the device isn't needed anymore.
|
|
*/
|
|
struct media_device *media_open(void);
|
|
|
|
/**
|
|
* @brief Close a media device.
|
|
* @param media - device instance.
|
|
*
|
|
* Close the @a media device instance and free allocated resources. Access to the
|
|
* device instance is forbidden after this function returns.
|
|
*/
|
|
void media_close(struct media_device *media);
|
|
|
|
/**
|
|
* @brief Locate the pad at the other end of a link.
|
|
* @param pad - sink pad at one end of the link.
|
|
*
|
|
* Locate the source pad connected to @a pad through an enabled link. As only one
|
|
* link connected to a sink pad can be enabled at a time, the connected source
|
|
* pad is guaranteed to be unique.
|
|
*
|
|
* @return A pointer to the connected source pad, or NULL if all links connected
|
|
* to @a pad are disabled. Return NULL also if @a pad is not a sink pad.
|
|
*/
|
|
struct media_pad *media_entity_remote_source(struct media_pad *pad);
|
|
|
|
/**
|
|
* @brief Get the type of an entity.
|
|
* @param entity - the entity.
|
|
*
|
|
* @return The type of @a entity.
|
|
*/
|
|
static inline unsigned int media_entity_type(struct media_entity *entity)
|
|
{
|
|
return entity->info.type & MEDIA_ENT_TYPE_MASK;
|
|
}
|
|
|
|
/**
|
|
* @brief Find an entity by its name.
|
|
* @param media - media device.
|
|
* @param name - entity name.
|
|
* @param length - size of @a name.
|
|
*
|
|
* Search for an entity with a name equal to @a name.
|
|
*
|
|
* @return A pointer to the entity if found, or NULL otherwise.
|
|
*/
|
|
struct media_entity *media_get_entity_by_name(struct media_device *media,
|
|
const char *name, size_t length);
|
|
|
|
/**
|
|
* @brief Find an entity by its ID.
|
|
* @param media - media device.
|
|
* @param id - entity ID.
|
|
*
|
|
* Search for an entity with an ID equal to @a id.
|
|
*
|
|
* @return A pointer to the entity if found, or NULL otherwise.
|
|
*/
|
|
struct media_entity *media_get_entity_by_id(struct media_device *media,
|
|
__u32 id);
|
|
|
|
/**
|
|
* @brief Configure a link.
|
|
* @param media - media device.
|
|
* @param source - source pad at the link origin.
|
|
* @param sink - sink pad at the link target.
|
|
* @param flags - configuration flags.
|
|
*
|
|
* Locate the link between @a source and @a sink, and configure it by applying
|
|
* the new @a flags.
|
|
*
|
|
* Only the MEDIA_LINK_FLAG_ENABLED flag is writable.
|
|
*
|
|
* @return 0 on success, -1 on failure:
|
|
* -ENOENT: link not found
|
|
* - other error codes returned by MEDIA_IOC_SETUP_LINK
|
|
*/
|
|
int media_setup_link(struct media_device *media,
|
|
struct media_pad *source, struct media_pad *sink,
|
|
__u32 flags);
|
|
|
|
/**
|
|
* @brief Reset all links to the disabled state.
|
|
* @param media - media device.
|
|
*
|
|
* Disable all links in the media device. This function is usually used after
|
|
* opening a media device to reset all links to a known state.
|
|
*
|
|
* @return 0 on success, or a negative error code on failure.
|
|
*/
|
|
int media_reset_links(struct media_device *media);
|
|
|
|
/**
|
|
* @brief Parse string to a pad on the media device.
|
|
* @param media - media device.
|
|
* @param p - input string
|
|
* @param endp - pointer to string where parsing ended
|
|
*
|
|
* Parse NULL terminated string describing a pad and return its struct
|
|
* media_pad instance.
|
|
*
|
|
* @return Pointer to struct media_pad on success, NULL on failure.
|
|
*/
|
|
struct media_pad *media_parse_pad(struct media_device *media,
|
|
const char *p, char **endp);
|
|
|
|
/**
|
|
* @brief Parse string to a link on the media device.
|
|
* @param media - media device.
|
|
* @param p - input string
|
|
* @param endp - pointer to p where parsing ended
|
|
*
|
|
* Parse NULL terminated string p describing a link and return its struct
|
|
* media_link instance.
|
|
*
|
|
* @return Pointer to struct media_link on success, NULL on failure.
|
|
*/
|
|
struct media_link *media_parse_link(struct media_device *media,
|
|
const char *p, char **endp);
|
|
|
|
/**
|
|
* @brief Parse string to a link on the media device and set it up.
|
|
* @param media - media device.
|
|
* @param p - input string
|
|
*
|
|
* Parse NULL terminated string p describing a link and its configuration
|
|
* and configure the link.
|
|
*
|
|
* @return 0 on success, or a negative error code on failure.
|
|
*/
|
|
int media_parse_setup_link(struct media_device *media,
|
|
const char *p, char **endp);
|
|
|
|
/**
|
|
* @brief Parse string to link(s) on the media device and set it up.
|
|
* @param media - media device.
|
|
* @param p - input string
|
|
*
|
|
* Parse NULL terminated string p describing link(s) separated by
|
|
* commas (,) and configure the link(s).
|
|
*
|
|
* @return 0 on success, or a negative error code on failure.
|
|
*/
|
|
int media_parse_setup_links(struct media_device *media, const char *p);
|
|
|
|
#endif
|
|
|