The main dynamic library needs to expose three C functions publicly:
* <code>GMPInit</code>
* <code>GMPGetAPI</code>
* <code>GMPShutdown</code>
The types for these functions are:
<pre>
typedef void (*GMPShutdownFunc)(void);
</pre>
See the Base API section for more information.
== The Meta-Data File ==
<code>content/media/gmp/gmp-api</code>
in any copy of the Gecko source code that includes GMP support. <code>GMPGetAPI</code> returns a void pointer which can be cast to the structure defined for any specific API, such as video encoding or decoding. Memory for the structure is allocated by the host, and the size of that allocation is passed in as well. In part this is done to allow the host to decide on how to allocate memory. Perhaps more importantly though, this allows the host to fill in parts of the structure before passing it to the GMP. An example would be the host passing callback function pointers to the GMP. This behavior should be specified clearly in any API specification.