diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2014-11-18 22:52:06 +0200 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2016-05-24 03:03:01 +0300 |
commit | c9601d407a7ca943e53fa49a5a5f69b868c6ed11 (patch) | |
tree | 248d13a9e817ba3c73fc50e2d655b4cd12013e10 /include/xlnx-plugin.h | |
parent | 3653f5e4d877176a30035d9123ac65daf46ba787 (diff) |
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'include/xlnx-plugin.h')
-rw-r--r-- | include/xlnx-plugin.h | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/include/xlnx-plugin.h b/include/xlnx-plugin.h new file mode 100644 index 0000000..ff39fed --- /dev/null +++ b/include/xlnx-plugin.h @@ -0,0 +1,93 @@ +/* + * Xilinx Video Library - Plugin API + * + * Copyright (C) 2014-2016 Ideas on board Oy + * + * Contact: Laurent Pinchart <laurent.pinchart@ideasonboard.com> + * + * This library 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 library 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 General Public License for + * more details. + */ + +#ifndef __XLNX_PLUGIN_H__ +#define __XLNX_PLUGIN_H__ + +/** + * \file + * \brief Library plugin support + * + * To be discovered by the Xilinx video library, plugins must export a plugin + * operations structure with a well-defined symbol name. Plugins should use the + * EXPORT_XLNX_VIDEO_PLUGIN() macro to declare the strucure and initialize its + * members with function pointers. + * + * \code{.c} + * EXPORT_XLNX_VIDEO_PLUGIN(myplugin) = { + * .info = myplugin_info, + * .scan = myplugin_scan, + * } + * \endcode + */ + +#include <xlnx-video.h> + +struct media_device; +struct xlnx_video_compoment; + +/** + * \brief Type of video component supported by the plugin + */ +enum xlnx_video_plugin_type { + /** + * Hardware video component, handled automatically when the plugin is + * loaded or the component discovered. + */ + XLNX_VIDEO_PLUGIN_TYPE_HARDWARE, + /** + * Software video component, instantiated manually. + */ + XLNX_VIDEO_PLUGIN_TYPE_SOFTWARE, +}; + +/** + * \brief Plugin information + */ +struct xlnx_video_plugin_info { + /** Plugin name */ + const char *name; + /** Plugin type, one of XLNX_VIDEO_PLUGIN_TYPE_* */ + enum xlnx_video_plugin_type type; +}; + +/** + * \brief Xilinx video plugin operations + */ +struct xlnx_video_plugin_ops { + /** + * Query plugin information. The returned structure must be valid for + * the lifetime of the plugin. + */ + const struct xlnx_video_plugin_info *(*info)(void); + struct xlnx_video_component *(*scan)(struct xlnx_video *xv, + struct media_device *mdev); + struct xlnx_video_component *(*create_component)(struct xlnx_video *xv); + void (*destroy_component)(struct xlnx_video *xv, + struct xlnx_video_compoment *xvcomp); + /** Reserved fields for ABI compatibility, must be set to NULL. */ + void (*reserved[10])(void); +}; + +/** \cond IGNORE */ +#define XLNX_VIDEO_PLUGIN_SYMBOL __xlnx_video_plugin +#define EXPORT_XLNX_VIDEO_PLUGIN(name) \ +const struct xlnx_video_plugin_ops XLNX_VIDEO_PLUGIN_SYMBOL +/** \endcond */ + +#endif /* __XLNX_PLUGIN_H__ */ |