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.
hardware_samsung/exynos5/hal/libcamera/mediactl.h

271 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