Every plugin must export a struct of type mdp_t. This struct contains the basic information about the plugin. For internal plugins, the mdp_t struct is referenced in the host program's MDP implementation, so it can have any name. For external plugins, the mdp_t struct must be exported with the name mdp (_mdp on platforms that prefix C symbols with underscores).
Format of the mdp_t struct:
#include "mdp/mdp.h"
typedef struct _mdp_t
{
// Plugin version information.
const uint32_t interfaceVersion;
const uint32_t pluginVersion;
// CPU flags.
const uint32_t cpuFlagsSupported;
const uint32_t cpuFlagsRequired;
// UUID - each plugin must have a unique ID.
const unsigned char uuid[16];
// Description.
mdp_desc_t *desc;
// Functions.
mdp_func_t *func;
} mdp_t;
Fields:
| Field | Type | Description |
|---|---|---|
| interfaceVersion | uint32_t | The MDP interface version used by the plugin. Can be generated using the MDP_VERSION(major, minor, revision) macro, or by using the MDP_INTERFACE_VERSION macro, which is defined as the interface version specified in the MDP headers being used. |
| pluginVersion | uint32_t | Plugin version. This is a user-defined value and can be anything. Use the MDP_VERSION(major, minor, revision) macro to create the version number. |
| cpuFlagsSupported | uint32_t | Bitfield of CPU flags supported by the plugin. The CPU flag values are defined in mdp_cpuflags.h. |
| cpuFlagsRequired | uint32_t | Bitfield of CPU flags required by the plugin. If any of the flags specified in this field are not supported by the current CPU, the plugin will not be loaded. |
| uuid | unsigned char[16] | Universally Unique Identifier used to uniquely identify the plugin. Use a tool such as uuidgen to generate the UUID. |
| desc | mdp_desc_t | Pointer to mdp_desc_t with description information about the plugin. |
| func | mdp_func_t | Pointer to mdp_func_t with various plugin functions, such as initialization and shutdown. |
The mdp_t.desc field points to a struct of type mdp_desc_t, which contains a description of the plugin.
Note: All strings are encoded using UTF-8.
#include "mdp/mdp.h"
typedef struct _mdp_desc_t
{
const char* name;
const char* author_mdp;
const char* author_orig;
const char* description;
const char* website;
const char* license;
// Filler for alignment purposes.
const void* reserved1;
const void* reserved2;
// Icon data. (PNG format)
const unsigned char* icon;
const unsigned int iconLength;
} mdp_desc_t;
Fields:
| Field | Type | Description |
|---|---|---|
| name | const char* | Name of the plugin. |
| author_mdp | const char* | Author of the plugin. |
| author_orig | const char* | Author of the original code. This is mainly used when porting a third-party renderer into the MDP plugin format. If the plugin author is the same as the code author, this field may be set to NULL. |
| description | const char* | A short description of the plugin. |
| website | const char* | The plugin author's website. May be NULL if no website is available. |
| license | const char* | Plugin license. Example licenses are "GPL-2", "GPL-3", "LGPL-2.1", and "BSD". See the Predefined Licenses section for more predefined licenses. |
| reserved1 | const void* | Reserved. |
| reserved2 | const void* | Reserved. |
| icon | const unsigned char* | Plugin icon. This field must point to a 32x32 PNG-format icon stored within the plugin as an unsigned char[] array. Alternatively, this field may be set to NULL to indicate no icon. |
| iconLength | const unsigned int | Length of the icon data pointed to by the icon field. |
mdp.h has several licenses predefined as macros:
#define MDP_LICENSE_GPL_2 "GPL-2" #define MDP_LICENSE_GPL_3 "GPL-3" #define MDP_LICENSE_LGPL_2 "LGPL-2" #define MDP_LICENSE_LGPL_21 "LGPL-2.1" #define MDP_LICENSE_LGPL_3 "LGPL-3" #define MDP_LICENSE_BSD "BSD" #define MDP_LICENSE_PD "Public Domain"
You may use any of these predefined licenses, or you may define your own.
The mdp_t.func field points to a struct of type mdp_func_t, which contains pointers to various functions within the plugin.
#include "mdp/mdp.h"
#include "mdp/mdp_host.h"
typedef void (MDP_FNCALL *mdp_init)(const mdp_host_t *host_srv);
typedef void (MDP_FNCALL *mdp_end)(void);
typedef struct _mdp_func_t
{
// Init/Shutdown functions
mdp_init init;
mdp_end end;
} mdp_func_t;
Fields:
| Field | Type | Description |
|---|---|---|
| init | mdp_init | Initialization function. The host_srv parameter is a pointer to the MDP Host Services struct. |
| end | mdp_end | Shutdown function. |