# MCAV Instance

To start using this library, you must first create an instance of the `MCAV` class. To do this, use the factory method
provided by the `MCAVApi` class to construct a new instance. Once you have your `MCAVApi` instance, you **MUST** call
the `install` function to install and load all required binaries automatically. This will download the required binaries
and set up the library for use.

Once you're done using the library, you **MUST** call the `release` method to release all native resources and shutdown
the library. You should only store one instance of the `MCAVApi` class throughout the life-cycle of your application or
plugin.

```java
  final MCAVApi api = MCAVApi.api();
  api.install(); // installs and loads the required binaries
  // ... use the library ...
  api.release(); // releases all native resources and shuts down the library
```

## Capabilities

MCAV utilizes several low-level libraries to provide a wide range of multimedia capabilities. Sometimes, some of these
capabilities may not be available on your platform or may require additional configuration. MCAV will try its best to
install all features it can, but some features may not be available on your platform. As far as MCAV is concerned,
usually FFmpeg, OpenCV, and yt-dlp are supported on all platforms, but VLC may not be available always.

You can check the capabilities of your MCAV instance by calling the `hasCapability` method on the `MCAVApi` instance.
A list of capabilities can be found in the `Capability` class. Use the capabilities to determine which features are
available on your platform.

```java
  final MCAVApi api = ...;
  if (api.hasCapability(Capability.VLC)){
    // VLC is available
  } else{
    // VLC is not available
  }
```

## Modules

MCAV supports a wide range of modules for different purposes. In fact, you are able to write your own modules that can
extend the functionality of MCAV. In order to gain access to a module, you must use the `getModule` method in your
`MCAVApi` instance. As an example, here is how to get the Bukkit module if you are developing for a Minecraft plugin.

```java
  final MCAVApi api = ...;
  final BukkitModule vlc = api.getModule(BukkitModule.class);
  ...
```