Add libv4l2 as requirement for the v4l2 plugin.

In order to convert formats not natively supported by obs the
v4l2 userspace library is required. This patch adds a cmake
script to find the library.
Replace all system calls with there counterpart in libv4l2.

By using the wrapper functions supplied by libv4l2 we gain
support for formats not natively supported by obs.
The library intercepts certain system calls to transparently
enable recoding.
Display emulated formats as such in v4l2 plugin.

Formats that are emulated by v4l2 are marked by appending
"(Emulated)" to them.
Fix handling of multiplanar pixelformats in v4l2 plugin.

The data provided by v4l2 for multiplanar formats is one
consecutive block that just needs to be splitted for obs.
Add function to prepare frame structure to v4l2 plugin.

This adds a function to prepare the source_frame struct for use
with obs_source_output_video. Since all of the values except for
the timestamp and data pointers are known in before it makes
little sense to compute them over and over again.

Due to the fact that v4l2 uses a single continuous memory segment
for multi planar formats we can also precompute memory offsets for
the planes.
Reorganized data struct and update function for v4l2 plugin.

Due to the plugin creating a thread to retrieve and output the
captured image data, care must taken to not modify data the
thread reads from the outside while the thread is running.

In previous revisions some settings accessed by the capture
thread were written to in the update function which could cause
image corruption and in the worst case crashes.

The members of the data struct are now split into two groups,
those that are used by the thread while it is running and must
not be changed from the outside, and those can be changed at any
time.
Remove the getwidth/getheight functions from v4l2 plugin.

Those functions are actually causing more problems than
helping out with the preview because the width/height is
updated immediately while the actual size of the frames
displayed changes later.
Improved Documentation and Logging for update in v4l2 plugin.

This adds some documentation to the update function and also
improves the logging by adding some info and bumping errors
to LOG_ERROR.
Add const keyword to fixed lists in v4l2 plugin.

This should save a little bit of memory memory.
Improved Documentation and Logging for mmap functions in v4l2 plugin.

This adds some documentation to the mmap functions and also
improves the logging by bumping errors to LOG_ERROR.
Add functions to specify OS module extensions
Change macro to MODULE_MISSING_EXPORTS for clarity

This is a bit more clear than MODULE_FUNCTION_NOT_FOUND.
(API Change) Refactor module handling

Changed API:
- char *obs_find_plugin_file(const char *sub_path);

  Changed to: char *obs_module_file(const char *file);

  Cahnge it so you no longer need to specify a sub-path such as:
  obs_find_plugin_file("module_name/file.ext")

  Instead, now automatically handle the module data path so all you need
  to do is:
  obs_module_file("file.ext")

- int obs_load_module(const char *name);

  Changed to: int obs_open_module(obs_module_t *module,
                                  const char *path,
                                  const char *data_path);
              bool obs_init_module(obs_module_t module);

  Change the module loading API so that if the front-end chooses, it can
  load modules directly from a specified path, and associate a data
  directory with it on the spot.

  The module will not be initialized immediately; obs_init_module must
  be called on the module pointer in order to fully initialize the
  module.  This is done so a module can be disabled by the front-end if
  the it so chooses.

New API:
- void obs_add_module_path(const char *bin, const char *data);

  These functions allow you to specify new module search paths to add,
  and allow you to search through them, or optionally just load all
  modules from them.  If the string %module% is included, it will
  replace it with the module's name when that string is used as a
  lookup.  Data paths are now directly added to the module's internal
  storage structure, and when obs_find_module_file is used, it will look
  up the pointer to the obs_module structure and get its data directory
  that way.

  Example:
  obs_add_module_path("/opt/obs/my-modules/%module%/bin",
                      "/opt/obs/my-modules/%module%/data");

  This would cause it to additionally look for the binary of a
  hypthetical module named "foo" at /opt/obs/my-modules/foo/bin/foo.so
  (or libfoo.so), and then look for the data in
  /opt/obs/my-modules/foo/data.

  This gives the front-end more flexibility for handling third-party
  plugin modules, or handling all plugin modules in a custom way.

- void obs_find_modules(obs_find_module_callback_t callback, void
                        *param);

  This searches the existing paths for modules and calls the callback
  function when any are found.  Useful for plugin management and custom
  handling of the paths by the front-end if desired.

- void obs_load_all_modules(void);

  Search through the paths and both loads and initializes all modules
  automatically without custom handling.

- void obs_enum_modules(obs_enum_module_callback_t callback,
                        void *param);

  Enumerates currently opened modules.
Remove version parameter from obs_module_load

Replaced by obs_get_version() API
Remove macro to free locale

This functionality can now be handled automatically because locale can
now be freed seaparately from obs_module_unload with
obs_module_free_locale, which is called automatically when the module is
being freed.
Add API functions to get information about modules
Add extra search path for third party plugins

The OBSBasic UI will now allow the use of a subdirectory of the user
application data directory for third-party plugins.  Though I'm not
entirely sure if this ideal or not.  Regardless, this is one of the
first (of many) steps towards a plugin manager.

On windows, this is %appdata%/obs-studio/plugins
On linux, this is ~/.obs-studio/plugins
On mac, this is ~/Library/Application Support/obs-sudio/plugins
Rename get_encoder_info for consistency

Sources/Outputs/Services all use a find_* naming scheme, so it felt out
of place for the encoder to use a different naming scheme.
Check for duplicate sources/outputs/encoders/etc

With the recent change to module handling by BtbN, I felt that having
this information might be useful in case someone is actually using make
install to set up their libraries.
Update ffmpeg find modules for recent changes to debian