<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.videolan.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wilawar</id>
	<title>VideoLAN Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.videolan.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wilawar"/>
	<link rel="alternate" type="text/html" href="https://wiki.videolan.org/Special:Contributions/Wilawar/"/>
	<updated>2026-11-04T15:55:02Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Hacker_Guide/How_To_Write_a_Module&amp;diff=33390</id>
		<title>Hacker Guide/How To Write a Module</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Hacker_Guide/How_To_Write_a_Module&amp;diff=33390"/>
		<updated>2017-07-06T17:28:07Z</updated>

		<summary type="html">&lt;p&gt;Wilawar: /* In-tree and out-of-tree modules */ Made the modules directory explicit up there&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LibVLC is based on many independent modules, like most competing multimedia frameworks. Each module provides specific functionality.&lt;br /&gt;
&lt;br /&gt;
This article focuses on adding a new module (a.k.a. plug-in) to VLC (or any other LibVLC application). You &#039;&#039;&#039;will need to read&#039;&#039;&#039; [[Documentation:Hacker%27s_Guide/Core#VLC_Pipeline_and_Modularity|VLC Core and Modules ]] and [[Documentation:VLC_Modules_Loading|How VLC loads modules]] first, otherwise you will not be able to flesh out the content of your new module.&lt;br /&gt;
&lt;br /&gt;
== In-tree and out-of-tree modules ==&lt;br /&gt;
&lt;br /&gt;
Most existing VLC modules are provided as source code in the directory [https://wiki.videolan.org/Documentation:Modules_source_tree/ modules] within the main VLC source code repository (and also the source tarballs). They are compiled at the same time as the VLC core, and usually provided distributed together with VLC binary packages and installers. These modules are called in-tree modules.&lt;br /&gt;
&lt;br /&gt;
However, it is also possible to write and compile VLC modules outside of VLC. That has some pros and cons over developing modules in-tree:&lt;br /&gt;
===Pros===&lt;br /&gt;
* Compilation is a lot faster (VLC and other modules are not included in the process).&lt;br /&gt;
* You can use your own version control system, or even none at all.&lt;br /&gt;
* The copyright license does not need to abide by the requirements of the [[VideoLAN]] association for inclusion in VLC. &lt;br /&gt;
* The source code does not need to be provided, reviewed and accepted by the VLC developers.&lt;br /&gt;
* The release schedule is independent of VLC releases. New versions of the module can be published at any time regardless of VLC release planning.&lt;br /&gt;
* Different programming languages can be used at least in theory. (The main VLC code base only uses C, C++ and Lua, and on MacOS Objective C.)&lt;br /&gt;
* The module can use software libraries that would be inadequate for VLC to depend on.&lt;br /&gt;
&lt;br /&gt;
===Cons===&lt;br /&gt;
* The VLC developers will not review the code, which would be a good opportunity to improve the code quality.&lt;br /&gt;
* VLC translators will not take care of localization for the module(s) where applicable. VLC is translated in many tens of languages.&lt;br /&gt;
* The module(s) cannot be distributed through the [http://www.videolan.org/ videolan.org] website and use the VideoLAN infrastructure such as the bug tracker and the build bots.&lt;br /&gt;
* The module(s) will only work with the particular VLC (major) version that it has been compiled for. For instance, a module compiled for VLC 1.1.x will not work with VLC 1.0.x or VLC 2.0.x.&lt;br /&gt;
* The module(s) will only work on the particular operating systems and architecture that it has been compiled for. For instance, a Windows 32-bit module will only work with Windows 32-bit versions of VLC. VLC supports many different combinations of operating systems and architectures.&lt;br /&gt;
&lt;br /&gt;
== Example stub module  ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s start with a small example module in the C language: &lt;br /&gt;
&amp;lt;pre&amp;gt;/**&lt;br /&gt;
 * @file hello.c&lt;br /&gt;
 * @brief Hello world interface VLC module example&lt;br /&gt;
 */&lt;br /&gt;
#ifdef HAVE_CONFIG_H&lt;br /&gt;
# include &amp;quot;config.h&amp;quot;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
/* VLC core API headers */&lt;br /&gt;
#include &amp;amp;lt;vlc_common.h&amp;amp;gt;&lt;br /&gt;
#include &amp;amp;lt;vlc_plugin.h&amp;amp;gt;&lt;br /&gt;
#include &amp;amp;lt;vlc_interface.h&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
/* Forward declarations */&lt;br /&gt;
static int Open(vlc_object_t *);&lt;br /&gt;
static void Close(vlc_object_t *);&lt;br /&gt;
&lt;br /&gt;
/* Module descriptor */&lt;br /&gt;
vlc_module_begin()&lt;br /&gt;
    set_shortname(N_(&amp;quot;Hello&amp;quot;))&lt;br /&gt;
    set_description(N_(&amp;quot;Hello interface&amp;quot;))&lt;br /&gt;
    set_capability(&amp;quot;interface&amp;quot;, 0)&lt;br /&gt;
    set_callbacks(Open, Close)&lt;br /&gt;
    set_category(CAT_INTERFACE)&lt;br /&gt;
    add_string(&amp;quot;hello-who&amp;quot;, &amp;quot;world&amp;quot;, &amp;quot;Target&amp;quot;, &amp;quot;Whom to say hello to.&amp;quot;, false)&lt;br /&gt;
vlc_module_end ()&lt;br /&gt;
&lt;br /&gt;
/* Internal state for an instance of the module */&lt;br /&gt;
struct intf_sys_t&lt;br /&gt;
{&lt;br /&gt;
    char *who;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Starts our example interface.&lt;br /&gt;
 */&lt;br /&gt;
static int Open(vlc_object_t *obj)&lt;br /&gt;
{&lt;br /&gt;
    intf_thread_t *intf = (intf_thread_t *)obj;&lt;br /&gt;
&lt;br /&gt;
    /* Allocate internal state */&lt;br /&gt;
    intf_sys_t *sys = malloc(sizeof (*sys));&lt;br /&gt;
    if (unlikely(sys == NULL))&lt;br /&gt;
        return VLC_ENOMEM;&lt;br /&gt;
    intf-&amp;gt;p_sys = sys;&lt;br /&gt;
&lt;br /&gt;
    /* Read settings */&lt;br /&gt;
    char *who = var_InheritString(intf, &amp;quot;hello-who&amp;quot;);&lt;br /&gt;
    if (who == NULL)&lt;br /&gt;
    {&lt;br /&gt;
        msg_Err(intf, &amp;quot;Nobody to say hello to!&amp;quot;);&lt;br /&gt;
        goto error;&lt;br /&gt;
    }&lt;br /&gt;
    sys-&amp;gt;who = who;&lt;br /&gt;
&lt;br /&gt;
    msg_Info(intf, &amp;quot;Hello %s!&amp;quot;, who);&lt;br /&gt;
    return VLC_SUCCESS;&lt;br /&gt;
&lt;br /&gt;
error:&lt;br /&gt;
    free(sys);&lt;br /&gt;
    return VLC_EGENERIC;    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Stops the interface. &lt;br /&gt;
 */&lt;br /&gt;
static void Close(vlc_object_t *obj)&lt;br /&gt;
{&lt;br /&gt;
    intf_thread_t *intf = (intf_thread_t *)obj;&lt;br /&gt;
    intf_sys_t *sys = intf-&amp;gt;p_sys;&lt;br /&gt;
&lt;br /&gt;
    msg_Info(intf, &amp;quot;Good bye %s!&amp;quot;, sys-&amp;gt;who);&lt;br /&gt;
&lt;br /&gt;
    /* Free internal state */&lt;br /&gt;
    free(sys-&amp;gt;who);&lt;br /&gt;
    free(sys);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And now some explanations about the code...&lt;br /&gt;
&lt;br /&gt;
=== Module Descriptor  ===&lt;br /&gt;
&lt;br /&gt;
A {{VLC}} module &#039;&#039;&#039;must&#039;&#039;&#039; include a &#039;&#039;description&#039;&#039; of itself, and the &#039;&#039;parameters&#039;&#039; it accepts. &lt;br /&gt;
&lt;br /&gt;
The module descriptor begins with: &lt;br /&gt;
&amp;lt;pre&amp;gt;vlc_module_begin()&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
You should set some basic information about your module. This is for the dvdread module:&lt;br /&gt;
&amp;lt;pre&amp;gt;    set_shortname(N_(&amp;quot;DVD without menus&amp;quot;))&lt;br /&gt;
    set_description(N_(&amp;quot;DVDRead Input&amp;quot;))&lt;br /&gt;
    set_category(CAT_INPUT)&lt;br /&gt;
    set_subcategory(SUBCAT_INPUT_ACCESS)&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&#039;&#039;Note&#039;&#039; the use of N_(&amp;quot;&amp;quot;) to create a string that needs to be translated by gettext.&lt;br /&gt;
&lt;br /&gt;
==== Capability and score ====&lt;br /&gt;
&lt;br /&gt;
Definition &#039;&#039;&#039;Example&#039;&#039;&#039;: &lt;br /&gt;
&amp;lt;pre&amp;gt;   set_capability(&amp;quot;interface&amp;quot;, 0)&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This defines a module of &amp;quot;interface&amp;quot; capability and a score of 0.&lt;br /&gt;
&lt;br /&gt;
The capability determines the type of module we are dealing with. It could be an access, a demux, a decoder, an interface, etc. Now is the time to &#039;&#039;&#039;re-read [[Documentation:VLC Modules Loading#How_does_the_loading_of_modules_happens|how VLC loads modules]]&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
*If VLC needs to load a specific name, it will load it by its name and VLC directly opens this module &lt;br /&gt;
*If VLC needs a type of module (&amp;quot;I need a decoder&amp;quot;), VLC will load all modules matching this capability in a decreasing score order until one modules&#039;s Open() function (see later) returns VLC_SUCCESS.&lt;br /&gt;
&lt;br /&gt;
See the major types of [[Documentation:VLC Modules Loading#Major_Capabilities_of_Modules|capabilities of VLC]]. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Score&#039;&#039;&#039; should be an integer, and related to other scores in the same category. Score 0 is a [[Documentation:VLC_Modules_Loading#Score_of_0|special case]].&lt;br /&gt;
&lt;br /&gt;
==== Configuration categories and sub-categories  ====&lt;br /&gt;
&lt;br /&gt;
You should use &#039;&#039;&#039;one&#039;&#039;&#039; of the &#039;&#039;&#039;predefined categories&#039;&#039;&#039; for configuration. The configuration categories and sub-categories specify &#039;&#039;&#039;where&#039;&#039;&#039; the module will appear in the &#039;&#039;&#039;preferences&#039;&#039;&#039; UI dialog. &lt;br /&gt;
&lt;br /&gt;
The configuration categories include: &lt;br /&gt;
*CAT_INTERFACE &lt;br /&gt;
*CAT_AUDIO &lt;br /&gt;
*CAT_VIDEO &lt;br /&gt;
*CAT_INPUT &lt;br /&gt;
*CAT_SOUT &lt;br /&gt;
*CAT_ADVANCED &lt;br /&gt;
*CAT_PLAYLIST&lt;br /&gt;
&lt;br /&gt;
You should use one of &#039;&#039;&#039;predefined sub-categories&#039;&#039;&#039; as well. See {{VLCSourceFile|name=include/vlc_configuration.h}} for definition of all configuration categories and sub-categories. &lt;br /&gt;
&lt;br /&gt;
==== Configuration parameters ====&lt;br /&gt;
&lt;br /&gt;
You may need options to configure the run-time behavior of your module. Defining new options is easy. &lt;br /&gt;
&lt;br /&gt;
All option definitions take the following argument list: &lt;br /&gt;
&amp;lt;pre&amp;gt; add_integer(name, value, text, longtext, advanced) &amp;lt;/pre&amp;gt; &lt;br /&gt;
*&#039;&#039;&#039;name&#039;&#039;&#039; is the string that identifies this parameter in the configuration. This name is used at the command prompt to set the configuration value. &lt;br /&gt;
*&#039;&#039;&#039;value&#039;&#039;&#039; is the default value for this parameter, &lt;br /&gt;
*&#039;&#039;&#039;text&#039;&#039;&#039; A short description of the parameter, use _(&amp;quot;&amp;quot;) to create a string that needs to be translated, &lt;br /&gt;
*&#039;&#039;&#039;longtext&#039;&#039;&#039; A complete description of the parameter, use _(&amp;quot;&amp;quot;) to create a string that needs to be translated,&lt;br /&gt;
*&#039;&#039;&#039;advanced&#039;&#039;&#039; Boolean, ADVanced Configuration. If TRUE, this parameter will only be displayed when using the --advanced flag.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; You may add the following options/parameter types to your module: &lt;br /&gt;
*add_integer, &lt;br /&gt;
*add_string, &lt;br /&gt;
*add_float, &lt;br /&gt;
*add_bool, &lt;br /&gt;
*add_key, &lt;br /&gt;
*add_file, &lt;br /&gt;
*add_directory,&lt;br /&gt;
&lt;br /&gt;
For complete definitions, see {{VLCSourceFile|name=include/vlc_plugin.h}}&lt;br /&gt;
&lt;br /&gt;
==== Callback  ====&lt;br /&gt;
&lt;br /&gt;
The activation and deactivation functions, detailed afterwards, must be defined in the descriptor. This is so that the VLC core knows how to instantiate and run the module.&lt;br /&gt;
&lt;br /&gt;
The set_callbacks() macro allows you to define 2 parameters: the first parameter is the pf_activate callback, and the second one, pf_deactivate. The functions are most often called &amp;quot;Open&amp;quot; and &amp;quot;Close&amp;quot; respectively, though. VLC invokes the pf_activate callback if/when it needs a plugin instance providing the correct interface, as declared with the set_capability() macro.&lt;br /&gt;
&lt;br /&gt;
Conversely, VLC invokes the pf_deactivate callback when the plugin is no longer needed - but only if the pf_activate callback returned VLC_SUCCESS (0) earlier.&lt;br /&gt;
&lt;br /&gt;
=== Open(vlc_object_t *) ===&lt;br /&gt;
&lt;br /&gt;
The most important function of a module is the opening: the usually-named Open() function. &lt;br /&gt;
&amp;lt;pre&amp;gt;static int  Open ( vlc_object_t * );&amp;lt;/pre&amp;gt; &lt;br /&gt;
The Open() function is called when the VLC core tries to open the module, and wants to load it. &lt;br /&gt;
&lt;br /&gt;
During Open(), setup of structures, devices or I/O, checks should be done. A successful open should return VLC_SUCCESS. If the module cannot complete its initialization, it can return any other value, usually VLC_EGENERIC or VLC_ENOMEM.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Open()&#039;&#039;&#039; function is expected to allocate private data (if any), and set up the private structure.&lt;br /&gt;
&lt;br /&gt;
If the Opening fails, you may need to free any already allocated resources before returning. Otherwise, leaks will occur.&lt;br /&gt;
&lt;br /&gt;
=== Close(vlc_object_t *)  ===&lt;br /&gt;
The second most important function of a module is the closing: the usually-named Close() function.&lt;br /&gt;
&amp;lt;pre&amp;gt;static int  Close ( vlc_object_t * );&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Close() function is called when the VLC core tries to close or unload an &#039;&#039;&#039;already-loaded&#039;&#039;&#039; module.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NB:&#039;&#039;&#039; If the Open() function failed, Close() will not get called.&lt;br /&gt;
&lt;br /&gt;
During Close(), closing devices or I/O, and cleaning of structures should be done. Do not leak memory here!&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Close()&#039;&#039;&#039; function should deallocate private data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== In-tree module integration ==&lt;br /&gt;
&lt;br /&gt;
=== Git ===&lt;br /&gt;
If you plan to submit your work to VLC upstream, be sure to look at [[Git |the git introduction]] and check the [[Git#Submitting_patches_to_the_vlc-devel_or_x264-devel|send patches part]].&lt;br /&gt;
&lt;br /&gt;
=== Compiling your module ===&lt;br /&gt;
&lt;br /&gt;
==== Modules.am ====&lt;br /&gt;
First, find the right subdirectory under [[Modules_source_tree| modules/]] to add your new code.&lt;br /&gt;
&lt;br /&gt;
# If the module has only one source code file module, simply add it in the subdirectory (e.g. modules/control/hello.c).&lt;br /&gt;
# Larger modules should get a sub-subdirectory of their own (e.g. modules/control/hello/*).&lt;br /&gt;
&lt;br /&gt;
Then you need to declare the module in the build system. For example, the file {{VLCSourceFile|name=modules/control/Modules.am}} tells the build system which source files are needed for each control module. For the example above, we could add these lines:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
libhello_plugin_la_SOURCES = hello.c&lt;br /&gt;
libhello_plugin_la_CFLAGS = $(AM_CFLAGS)&lt;br /&gt;
libhello_plugin_la_LIBADD = $(AM_LIBADD)&lt;br /&gt;
libhello_plugin_la_DEPENDENCIES =&lt;br /&gt;
# Always compile the hello module:&lt;br /&gt;
libvlc_LTLIBRARIES += libhello_plugin.la&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that indentation in Modules.am (if needed) uses tabulations (ASCII 0x09), not white spaces.&lt;br /&gt;
&lt;br /&gt;
==== configure.ac ====&lt;br /&gt;
&lt;br /&gt;
If the module depends on some new library, some architecture or some operating system characteristics, you may need to extend configure.ac to detect when and how to build the module. Refer to the configure.ac file and the [http://www.gnu.org/software/autoconf/manual/index.html GNU autoconf documentation] for details.&lt;br /&gt;
&lt;br /&gt;
Once this is done, you should only need to rebuild VLC:&lt;br /&gt;
 make&lt;br /&gt;
(This will probably trigger a re-run of autoconf and automake, so it might take a while.)&lt;br /&gt;
&lt;br /&gt;
=== Loading your module ===&lt;br /&gt;
&lt;br /&gt;
VLC keeps a cache of available modules for performance reasons. It should be updated automatically. But you can use &#039;&#039;./vlc --reset-plugins-cache&#039;&#039; to force a reset.&lt;br /&gt;
&lt;br /&gt;
Then use&lt;br /&gt;
 ./vlc -vvv --color --list&lt;br /&gt;
to check that your plugin is seen by {{VLC}}.&lt;br /&gt;
&lt;br /&gt;
You should also see it in the plugins dialog of the [[Qt interface]] (Linux and Windows).&lt;br /&gt;
&lt;br /&gt;
== Out-of-tree module ==&lt;br /&gt;
&lt;br /&gt;
There is a dedicated article. Please read [[OutOfTreeCompile|out of tree compilation]].&lt;br /&gt;
&lt;br /&gt;
== Sub-modules  ==&lt;br /&gt;
&lt;br /&gt;
Sub-modules, declared in some module descriptors with &lt;br /&gt;
&lt;br /&gt;
 add_submodule()&lt;br /&gt;
&lt;br /&gt;
work exactly the same way as modules. They are useful when different modules (usually but not necessarily of different capability) share common code. All sub-modules will be included in the same run-time library as the main module.&lt;br /&gt;
&lt;br /&gt;
== Module types ==&lt;br /&gt;
&lt;br /&gt;
Depending on the module capability, you will need more information, about the necessary functions to implement.&lt;br /&gt;
&lt;br /&gt;
We will detail those here:&lt;br /&gt;
* [[Hacker_Guide/Access|Access]]&lt;br /&gt;
* [[Hacker_Guide/Demux|Demux]]&lt;br /&gt;
* [[Hacker_Guide/Access_Demux|Access_Demux]]&lt;br /&gt;
* [[Hacker_Guide/Decoder|Decoder]]&lt;br /&gt;
* Interface&lt;br /&gt;
* [[Hacker_Guide/Video_Filters|Video filter]]&lt;br /&gt;
* [[Hacker_Guide/Video_Output|Video output]]&lt;br /&gt;
* [[Hacker_Guide/Audio_Filters|Audio filter]]&lt;br /&gt;
* [[Hacker_Guide/Audio_Output|Audio output]]&lt;br /&gt;
&lt;br /&gt;
== Module load troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
Sometimes when building an in-tree module, stuff doesn&#039;t work due to build system problems and other inconsistencies.&lt;br /&gt;
&lt;br /&gt;
You probably need to go to the root of your VLC source tree, and do something akin to the following. The examples here assume the &#039;&#039;bash&#039;&#039; shell.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Mild version&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
In some cases, automake dependencies break (for instance after some filenames have changed). This might then work:&lt;br /&gt;
&lt;br /&gt;
 find . -name .deps -exec rm -rf \{\} \;&lt;br /&gt;
 ./config.status&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
...but not always, so it may save some headaches to always use the &amp;quot;medium version&amp;quot; below.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Medium version&#039;&#039;&#039; (try this first)===&lt;br /&gt;
&lt;br /&gt;
This is a more radical but still safe rebuild procedure:&lt;br /&gt;
&lt;br /&gt;
 find . -name .deps -exec rm -rf \{\} \;&lt;br /&gt;
 ./bootstrap&lt;br /&gt;
 ./configure&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Extreme version&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
If the none of the above helped, you can clean the source tree as a measure of last resort.&lt;br /&gt;
Before you proceed, it is highly recommended that you check which files are going to be erased:&lt;br /&gt;
 git clean -nxd&lt;br /&gt;
&lt;br /&gt;
And then check what source code changes you would lose (if any):&lt;br /&gt;
 git diff&lt;br /&gt;
&lt;br /&gt;
You can extremely easily lose entire days of hard work with the following commands. &lt;br /&gt;
The first command will permanently remove any files not tracked in [[git]], including files that you might have created yourself.&lt;br /&gt;
The second command will remove any uncommitted modification to existing files. Consider yourself warned.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;!!!BEWARE: THIS MAY CAUSE UNRECOVERABLE DATA LOSS!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 git clean -fxd&lt;br /&gt;
 git reset --hard HEAD&lt;br /&gt;
 ./bootstrap&lt;br /&gt;
 ./configure&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
{{Documentation}} &lt;br /&gt;
[[Category:Coding]]&lt;br /&gt;
[[Category:Hacker Guide]]&lt;/div&gt;</summary>
		<author><name>Wilawar</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Documentation:VLC_Modules_Loading&amp;diff=33389</id>
		<title>Documentation:VLC Modules Loading</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Documentation:VLC_Modules_Loading&amp;diff=33389"/>
		<updated>2017-07-06T17:12:33Z</updated>

		<summary type="html">&lt;p&gt;Wilawar: /* How does the loading of modules happen */ Minor grammatical correction.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;VLC modules loading&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
= How does VLC load modules?  =&lt;br /&gt;
&lt;br /&gt;
== Introduction about Modules  ==&lt;br /&gt;
&lt;br /&gt;
VLC has a core and a lot of modules (between 200 and 400 depending on the build). &lt;br /&gt;
&lt;br /&gt;
VLC cannot do much without modules, since modules are providing most of the functionalities we expect. See the &amp;quot;Major Capabilites&amp;quot; sections. &lt;br /&gt;
&lt;br /&gt;
A VLC module has 2 &#039;&#039;major&#039;&#039; &#039;&#039;properties&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
*the capability, VLC_MODULE_CAPABILITY, that describes the category of the module &lt;br /&gt;
*the score, VLC_MODULE_SCORE, that holds the priority of the module&lt;br /&gt;
&lt;br /&gt;
== How does the loading of modules happen  ==&lt;br /&gt;
&lt;br /&gt;
The first time you load VLC, it will scan the default &#039;&#039;&#039;plugins&#039;&#039;&#039; directories that should contain VLC modules and generate a cache (named the &#039;&#039;&#039;plugins cache&#039;&#039;&#039;) so that the modules can be loaded quickly the next time VLC launches. Modules can be organized into directories (up to 5 layers deep) beneath the &#039;&#039;&#039;plugins&#039;&#039;&#039; directory. &lt;br /&gt;
&lt;br /&gt;
Recent versions of VLC require that the modules follow a specific naming convention or they will not be loaded. Modules must be named in the following format: &#039;&#039;&#039;lib&#039;&#039;module_name&#039;&#039;_plugin.&#039;&#039;ext&#039;&#039;&#039;&#039;&#039; where &#039;&#039;module_name&#039;&#039; should be the name of your module in lower case, and &#039;&#039;ext&#039;&#039; is the system&#039;s shared library extension. For example, the &#039;&#039;&#039;http&#039;&#039;&#039; access module is named &#039;&#039;&#039;libaccess_http_plugin.dll&#039;&#039;&#039; on a Windows machine.&lt;br /&gt;
&lt;br /&gt;
When VLC needs a module, it tries to open the module with the highest score that has the required capability and accepts the request.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Let&#039;s do an &#039;&#039;&#039;example&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
When VLC needs a &amp;quot;decoder&amp;quot; (&amp;quot;decoder&amp;quot; is one category/capability), it opens all &amp;quot;decoder&amp;quot; modules, until one matches. &lt;br /&gt;
&lt;br /&gt;
It opens them in decreasing score order (biggest score first, smaller ones at the end), and runs the Open() function of the modules. When one module returns OK, VLC uses this module.&lt;br /&gt;
&lt;br /&gt;
== Advanced info about modules loading ==&lt;br /&gt;
&lt;br /&gt;
=== Score of 0  ===&lt;br /&gt;
&lt;br /&gt;
If a module has a score of 0, it needs to be explicitly requested by the user or vlc (like forcing --codec, --vout or &amp;lt;code&amp;gt;module_need(&amp;quot;foo&amp;quot;)&amp;lt;/code&amp;gt;) to be loaded.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== all, none and other special tweaks  ===&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;&amp;quot;all&amp;quot;&#039;&#039;&#039; mode means all modules will be tested in decreasing order of score.&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;&amp;quot;none&amp;quot;&#039;&#039;&#039; mode means no modules will be tested.&lt;br /&gt;
&lt;br /&gt;
*Any module can be requested by using its direct shortname. This is useful for 0-scored modules.&lt;br /&gt;
&lt;br /&gt;
=== examples  ===&lt;br /&gt;
&lt;br /&gt;
Modules requests can be chained, as the &#039;&#039;&#039;examples&#039;&#039;&#039; show: &lt;br /&gt;
&lt;br /&gt;
 --codec avcodec,all&lt;br /&gt;
 &#039;&#039;try the avcodec module than all modules as a &amp;quot;decoder&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 --demux avformat,none&lt;br /&gt;
 &#039;&#039; try the avformat module and no other module&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
By default, modules requests are in the &#039;&#039;&#039;&amp;quot;all&amp;quot;&#039;&#039;&#039; mode, and &amp;quot;all&amp;quot; can be omitted. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How to list Modules  ==&lt;br /&gt;
&lt;br /&gt;
*Using Console&lt;br /&gt;
&lt;br /&gt;
 vlc --list&lt;br /&gt;
&lt;br /&gt;
*Using the Qt GUI&lt;br /&gt;
&lt;br /&gt;
 Menu -&amp;amp;gt; Tools -&amp;amp;gt; Plugins and extensions&lt;br /&gt;
&lt;br /&gt;
= Major Capabilities of Modules =&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;audio filter&amp;lt;/tt&amp;gt;&lt;br /&gt;
: An audio filter, like an equalizer&lt;br /&gt;
; &amp;lt;tt&amp;gt;audio mixer&amp;lt;/tt&amp;gt;&lt;br /&gt;
: An audio channel mixer, like a downmixer&lt;br /&gt;
; &amp;lt;tt&amp;gt;audio output&amp;lt;/tt&amp;gt;&lt;br /&gt;
: An audio output, like Windows DirectX audio output&lt;br /&gt;
; &amp;lt;tt&amp;gt;decoder&amp;lt;/tt&amp;gt;&lt;br /&gt;
: A codec decoder, like theora&lt;br /&gt;
; &amp;lt;tt&amp;gt;demux&amp;lt;/tt&amp;gt;&lt;br /&gt;
: A demuxer, to open a file format, like mkv&lt;br /&gt;
; &amp;lt;tt&amp;gt;encoder&amp;lt;/tt&amp;gt;&lt;br /&gt;
: A codec encoder, like x264&lt;br /&gt;
; &amp;lt;tt&amp;gt;interface&amp;lt;/tt&amp;gt;&lt;br /&gt;
: An interface, like the Qt interface&lt;br /&gt;
; &amp;lt;tt&amp;gt;meta reader&amp;lt;/tt&amp;gt;&lt;br /&gt;
: A meta reader, to read metadata&lt;br /&gt;
; &amp;lt;tt&amp;gt;packetizer&amp;lt;/tt&amp;gt;&lt;br /&gt;
: A packetizer&lt;br /&gt;
; &amp;lt;tt&amp;gt;playlist export&amp;lt;/tt&amp;gt;&lt;br /&gt;
: A module to write playlist, like .m3u&lt;br /&gt;
; &amp;lt;tt&amp;gt;services_discovery&amp;lt;/tt&amp;gt;&lt;br /&gt;
: A module to get extra content from your computer or the network, like Upnp, DLNA&lt;br /&gt;
; &amp;lt;tt&amp;gt;sout access&amp;lt;/tt&amp;gt;&lt;br /&gt;
: An access for the streaming&lt;br /&gt;
; &amp;lt;tt&amp;gt;sout mux&amp;lt;/tt&amp;gt;&lt;br /&gt;
: A muxer when streaming and encoding&lt;br /&gt;
; &amp;lt;tt&amp;gt;stream_filter&amp;lt;/tt&amp;gt;&lt;br /&gt;
: A stream filter&lt;br /&gt;
; &amp;lt;tt&amp;gt;text renderer&amp;lt;/tt&amp;gt;&lt;br /&gt;
: A way to display subtitles and other text on top of the video&lt;br /&gt;
; &amp;lt;tt&amp;gt;video filter&amp;lt;/tt&amp;gt;&lt;br /&gt;
: A video filter, like contrast adjusting&lt;br /&gt;
; &amp;lt;tt&amp;gt;visualization2&amp;lt;/tt&amp;gt;&lt;br /&gt;
: A visualizer, to create videos from the music&lt;br /&gt;
; &amp;lt;tt&amp;gt;vout display&amp;lt;/tt&amp;gt;&lt;br /&gt;
: A video output, to display videos like Direct3D or Xv&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Documentation}}&lt;/div&gt;</summary>
		<author><name>Wilawar</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Documentation:VLC_Modules_Loading&amp;diff=31747</id>
		<title>Documentation:VLC Modules Loading</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Documentation:VLC_Modules_Loading&amp;diff=31747"/>
		<updated>2016-12-31T23:57:27Z</updated>

		<summary type="html">&lt;p&gt;Wilawar: /* How does the loading of modules happen */ Some minor corrections of language&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;VLC modules loading&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
= How does VLC load modules?  =&lt;br /&gt;
&lt;br /&gt;
== Introduction about Modules  ==&lt;br /&gt;
&lt;br /&gt;
VLC has a core and a lot of modules (between 200 and 400 depending on the build). &lt;br /&gt;
&lt;br /&gt;
VLC cannot do much without modules, since modules are providing most of the functionalities we expect. See the &amp;quot;Major Capabilites&amp;quot; sections. &lt;br /&gt;
&lt;br /&gt;
A VLC module has 2 &#039;&#039;major&#039;&#039; &#039;&#039;properties&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
*the capability, VLC_MODULE_CAPABILITY, that describes the category of the module &lt;br /&gt;
*the score, VLC_MODULE_SCORE, that holds the priority of the module&lt;br /&gt;
&lt;br /&gt;
== How does the loading of modules happen  ==&lt;br /&gt;
&lt;br /&gt;
The first time you load VLC, it will scan the default &#039;&#039;&#039;plugins&#039;&#039;&#039; directories that should contain VLC modules and generates a cache (named the &#039;&#039;&#039;plugins cache&#039;&#039;&#039;) so that the modules can be loaded quickly the next time VLC launches. Modules can be organized into directories (up to 5 layers deep) beneath the &#039;&#039;&#039;plugins&#039;&#039;&#039; directory. &lt;br /&gt;
&lt;br /&gt;
Recent versions of VLC require that the modules follow a specific naming convention or they will not be loaded. Modules must be named in the following format: &#039;&#039;&#039;lib&#039;&#039;module_name&#039;&#039;_plugin.&#039;&#039;ext&#039;&#039;&#039;&#039;&#039; where &#039;&#039;module_name&#039;&#039; should be the name of your module in lower case, and &#039;&#039;ext&#039;&#039; is the system&#039;s shared library extension. For example, the &#039;&#039;&#039;http&#039;&#039;&#039; access module is named &#039;&#039;&#039;libaccess_http_plugin.dll&#039;&#039;&#039; on a Windows machine.&lt;br /&gt;
&lt;br /&gt;
When VLC needs a module, it tries to open the module with the highest score that has the required capability and accepts the request.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Let&#039;s do an &#039;&#039;&#039;example&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
When VLC needs a &amp;quot;decoder&amp;quot; (&amp;quot;decoder&amp;quot; is one category/capability), it opens all &amp;quot;decoder&amp;quot; modules, until one matches. &lt;br /&gt;
&lt;br /&gt;
It opens them in decreasing score order (biggest score first, smaller ones at the end), and runs the Open() function of the modules. When one module returns OK, VLC uses this module.&lt;br /&gt;
&lt;br /&gt;
== Advanced info about modules loading ==&lt;br /&gt;
&lt;br /&gt;
=== Score of 0  ===&lt;br /&gt;
&lt;br /&gt;
If a module has a score of 0, it needs to be explicitly requested by the user or vlc (like forcing --codec, --vout or &amp;lt;code&amp;gt;module_need(&amp;quot;foo&amp;quot;)&amp;lt;/code&amp;gt;) to be loaded.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== all, none and other special tweaks  ===&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;&amp;quot;all&amp;quot;&#039;&#039;&#039; mode means all modules will be tested in decreasing order of score.&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;&amp;quot;none&amp;quot;&#039;&#039;&#039; mode means no modules will be tested.&lt;br /&gt;
&lt;br /&gt;
*Any module can be requested by using its direct shortname. This is useful for 0-scored modules.&lt;br /&gt;
&lt;br /&gt;
=== examples  ===&lt;br /&gt;
&lt;br /&gt;
Modules requests can be chained, as the &#039;&#039;&#039;examples&#039;&#039;&#039; show: &lt;br /&gt;
&lt;br /&gt;
 --codec avcodec,all&lt;br /&gt;
 &#039;&#039;try the avcodec module than all modules as a &amp;quot;decoder&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 --demux avformat,none&lt;br /&gt;
 &#039;&#039; try the avformat module and no other module&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
By default, modules requests are in the &#039;&#039;&#039;&amp;quot;all&amp;quot;&#039;&#039;&#039; mode, and &amp;quot;all&amp;quot; can be omitted. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How to list Modules  ==&lt;br /&gt;
&lt;br /&gt;
*Using Console&lt;br /&gt;
&lt;br /&gt;
 vlc --list&lt;br /&gt;
&lt;br /&gt;
*Using GUI&lt;br /&gt;
&lt;br /&gt;
 Menu -&amp;amp;gt; Tools -&amp;amp;gt; Plugins and extensions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Major Capabilities of Modules =&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;audio filter&#039;&#039;&#039; : an audio filter, like an equalizer&lt;br /&gt;
*&#039;&#039;&#039;audio mixer&#039;&#039;&#039;  : an audio channel mixer, like a downmixer&lt;br /&gt;
*&#039;&#039;&#039;audio output&#039;&#039;&#039;  : an audio output, like Windows DirectX audio output&lt;br /&gt;
*&#039;&#039;&#039;decoder&#039;&#039;&#039;  : a codec decoder, like theora&lt;br /&gt;
*&#039;&#039;&#039;demux&#039;&#039;&#039;  : a demuxer, to open a file format, like mkv&lt;br /&gt;
*&#039;&#039;&#039;encoder&#039;&#039;&#039;  : a codec encoder, like x264&lt;br /&gt;
*&#039;&#039;&#039;interface&#039;&#039;&#039;  : an interface, like the Qt interface&lt;br /&gt;
*&#039;&#039;&#039;meta reader&#039;&#039;&#039;  : a meta reader, to read metadata&lt;br /&gt;
*&#039;&#039;&#039;packetizer&#039;&#039;&#039; : a packetizer&lt;br /&gt;
*&#039;&#039;&#039;playlist export&#039;&#039;&#039; : a module to write playlist, like .m3u&lt;br /&gt;
*&#039;&#039;&#039;services_discovery&#039;&#039;&#039; : a module to get extra content from your computer or the network, like Upnp, DLNA&lt;br /&gt;
*&#039;&#039;&#039;sout access&#039;&#039;&#039; : an access for the streaming&lt;br /&gt;
*&#039;&#039;&#039;sout mux&#039;&#039;&#039; : a muxer when streaming and encoding&lt;br /&gt;
*&#039;&#039;&#039;stream_filter&#039;&#039;&#039; : a stream filter&lt;br /&gt;
*&#039;&#039;&#039;text renderer&#039;&#039;&#039; : a way to display subtitles and other text on top of the video&lt;br /&gt;
*&#039;&#039;&#039;video filter&#039;&#039;&#039; : a video filter, like contrast adjusting&lt;br /&gt;
*&#039;&#039;&#039;visualization2&#039;&#039;&#039; : a visualizer, to create videos from the music&lt;br /&gt;
*&#039;&#039;&#039;vout display&#039;&#039;&#039; : a video output, to display videos like Direct3D or Xv&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Documentation}}&lt;/div&gt;</summary>
		<author><name>Wilawar</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=VLC_GPU_Decoding&amp;diff=31262</id>
		<title>VLC GPU Decoding</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=VLC_GPU_Decoding&amp;diff=31262"/>
		<updated>2016-10-26T22:32:00Z</updated>

		<summary type="html">&lt;p&gt;Wilawar: /* Introduction */ ‘chip’ since it’s actually not all that often a dedicated card anymore&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The {{VLC}} framework can use your &#039;&#039;&#039;&#039;&#039;graphics chip&#039;&#039;&#039;&#039;&#039; (a.k.a. GPU) to accelerate decoding of video streams depending on the video codec, graphic card model and operating system. In some cases, it can let the graphic card perform post-processing and rendering of the decoded video. In any case, this frees the main processor (i.e. CPU) of some of the most computationally heavy sub-tasks involved in playing digital video.&lt;br /&gt;
&lt;br /&gt;
= Activation =&lt;br /&gt;
To enable hardware accelerated decoding, use the VLC preferences. By default, hardware acceleration is disabled (and consequently, hardware acceleration is not yet available to external application via LibVLC).&lt;br /&gt;
&lt;br /&gt;
In VLC version 2.1, you can select which acceleration method you wish to use among those available for your operating system (if any). In earlier versions, there was simply a check box as shown below:&lt;br /&gt;
&lt;br /&gt;
[[File:VLC_GPU.png]]&lt;br /&gt;
&lt;br /&gt;
= Operating system support =&lt;br /&gt;
&lt;br /&gt;
== Windows  ==&lt;br /&gt;
Since VLC version 1.1.0, [http://en.wikipedia.org/wiki/DirectX_Video_Acceleration DirectX Video Acceleration] (DxVA) is supported in its version &#039;&#039;&#039;2.0&#039;&#039;&#039;. It is available in &#039;&#039;Windows Vista&#039;&#039; (or &#039;&#039;Windows 2008&#039;&#039;) or any later Windows version; it is &#039;&#039;&#039;not&#039;&#039;&#039; available for Windows XP/2003 (and never will be).&lt;br /&gt;
&lt;br /&gt;
The following video codecs are supported: [[MPEG|MPEG-1]], [[MPEG|MPEG-2]], [[Windows_Media|WMV3]], [[Windows_Media|VC-1]] and [[H.264|H.264 (MPEG-4 AVC)]].&lt;br /&gt;
&lt;br /&gt;
== X11 (GNU/Linux, FreeBSD, etc.) ==&lt;br /&gt;
&lt;br /&gt;
On Linux/X11, there are two competing interfaces for hardware video decoding, VA-API from [http://www.intel.com/ Intel], and VDPAU from [http://www.nvidia.com/ NVIDIA]. Generally, VAAPI is used for Intel and Broadcom graphic cards, while VDPAU is used for AMD/ATI and NVIDIA cards.&lt;br /&gt;
&lt;br /&gt;
=== VA-API ===&lt;br /&gt;
VA-API is supported for decoding only since VLC version &#039;&#039;&#039;1.1.0&#039;&#039;&#039;.&lt;br /&gt;
Refer to [[VLC_VAAPI]] for more details.&lt;br /&gt;
&lt;br /&gt;
On modern Ubuntu distributions, first install the hardware support (packages &#039;&#039;&#039;i965-va-driver&#039;&#039;&#039;, &#039;&#039;&#039;libva-intel-vaapi-driver&#039;&#039;&#039; and &#039;&#039;&#039;vainfo&#039;&#039;&#039;) and then activate GPU hardware acceleration in Preferences -&amp;gt; Input&amp;amp;Codecs.&lt;br /&gt;
&lt;br /&gt;
Install terminal command: &#039;&#039;sudo apt-get install i965-va-driver libva-intel-vaapi-driver vainfo&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following video codecs are supported: [[MPEG|MPEG-1]], [[MPEG|MPEG-2]], [[MPEG-4|MPEG-4 Visual]], [[Windows_Media|WMV3]], [[Windows_Media|VC-1]] and [[H.264|H.264 (MPEG-4 AVC)]].&lt;br /&gt;
&lt;br /&gt;
=== VDPAU ===&lt;br /&gt;
VDPAU is supported for decoding since VLC version &#039;&#039;&#039;2.1.0&#039;&#039;&#039;, and for post-processing and rendering since VLC &#039;&#039;&#039;2.2.0&#039;&#039;&#039; (still in development as of late 2013).&lt;br /&gt;
&lt;br /&gt;
VDPAU will be enabled automatically by default in VLC version 2.2.0 onward.&lt;br /&gt;
Refer to http://www.remlab.net/op/vlc-vdpau.shtml for technical details.&lt;br /&gt;
&lt;br /&gt;
The following video codecs are supported for decoding: [[MPEG|MPEG-1]], [[MPEG|MPEG-2]], [[MPEG-4|MPEG-4 Visual]] (and possibly H.263), [[Windows_Media|WMV3]], [[Windows_Media|VC-1]] and [[H.264|H.264 (MPEG-4 AVC)]]. Almost all video codecs are supported  for post-processing and rendering.&lt;br /&gt;
&lt;br /&gt;
== Mac OS X  ==&lt;br /&gt;
Video Decoding Acceleration (VDA) comes with MacOS X.6.3 and later (see [http://developer.apple.com/mac/library/technotes/tn2010/tn2267.html API]). This is somewhat supported in VLC 2.1.0.&lt;br /&gt;
&lt;br /&gt;
Only [[H.264|H.264 (MPEG-4 AVC)]] is supported currently.&lt;br /&gt;
&lt;br /&gt;
= Graphic card compatibility =&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
&lt;br /&gt;
To check your DxVA compatibility, please &#039;&#039;&#039;download [http://bluesky23.yukishigure.com/en/DXVAChecker.html DxVA Checker]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== nVidia  ===&lt;br /&gt;
&lt;br /&gt;
For nVidia GPU, you are &#039;&#039;&#039;required&#039;&#039;&#039; to use a GPU supporting [[wikipedia:Nvidia_PureVideo|PureVideo]] in its 2nd generation (VP2 or newer), which means that you need an [[wikipedia:Nvidia_Ion|ION]], [[wikipedia:GeForce_8_Series|GeForce 8]], [[wikipedia:GeForce_9_Series|GeForce 9]] (recpmmended), [[wikipedia:GeForce_200_Series|GeForce 200]] or newer. &lt;br /&gt;
&lt;br /&gt;
We strongly &#039;&#039;&#039;recommend&#039;&#039;&#039; a VP3 or VP4 GPU.&lt;br /&gt;
&lt;br /&gt;
To be sure, check your GPU against [[wikipedia:Nvidia_PureVideo#Table_of_PureVideo_.28HD.29_GPUs|this table on Wikipedia]] and check if you are VP2 or newer.&lt;br /&gt;
&lt;br /&gt;
=== ATI  ===&lt;br /&gt;
&lt;br /&gt;
For ATI GPUs, you &#039;&#039;&#039;NEED&#039;&#039;&#039; Catalyst 10.7, that is just out. &lt;br /&gt;
&lt;br /&gt;
Then, you are required to use a GPU supporting [http://en.wikipedia.org/wiki/Unified_Video_Decoder Unified Video Decoder]. &lt;br /&gt;
&lt;br /&gt;
We believe you need a [http://en.wikipedia.org/wiki/Unified_Video_Decoder#UVD_enabled_GPUs GPU supporting UVD2], like HD4xxx, 5xxx, 6xxx or 3200. One might have success with UVD+ GPU, like some HD 3xxx, but this isn&#039;t tested.&lt;br /&gt;
&lt;br /&gt;
=== Intel  ===&lt;br /&gt;
&lt;br /&gt;
Latest Intel GMA should work. Tested on GNU/Linux (Ubuntu 13.10) and hardware acceleration definitely works for Intel HD Graphics 3000 (dropped CPU usage for HD720 (1280 x 720, H.264, 24fps) from 12-13% to 6%).&lt;/div&gt;</summary>
		<author><name>Wilawar</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=VLC_GPU_Decoding&amp;diff=31261</id>
		<title>VLC GPU Decoding</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=VLC_GPU_Decoding&amp;diff=31261"/>
		<updated>2016-10-26T22:30:39Z</updated>

		<summary type="html">&lt;p&gt;Wilawar: /* Introduction */ Added ‘s’ in ‘graphics cards’&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The {{VLC}} framework can use your &#039;&#039;&#039;&#039;&#039;graphics card&#039;&#039;&#039;&#039;&#039; (a.k.a. GPU) to accelerate decoding of video streams depending on the video codec, graphic card model and operating system. In some cases, it can let the graphic card perform post-processing and rendering of the decoded video. In any case, this frees the main processor (i.e. CPU) of some of the most computationally heavy sub-tasks involved in playing digital video.&lt;br /&gt;
&lt;br /&gt;
= Activation =&lt;br /&gt;
To enable hardware accelerated decoding, use the VLC preferences. By default, hardware acceleration is disabled (and consequently, hardware acceleration is not yet available to external application via LibVLC).&lt;br /&gt;
&lt;br /&gt;
In VLC version 2.1, you can select which acceleration method you wish to use among those available for your operating system (if any). In earlier versions, there was simply a check box as shown below:&lt;br /&gt;
&lt;br /&gt;
[[File:VLC_GPU.png]]&lt;br /&gt;
&lt;br /&gt;
= Operating system support =&lt;br /&gt;
&lt;br /&gt;
== Windows  ==&lt;br /&gt;
Since VLC version 1.1.0, [http://en.wikipedia.org/wiki/DirectX_Video_Acceleration DirectX Video Acceleration] (DxVA) is supported in its version &#039;&#039;&#039;2.0&#039;&#039;&#039;. It is available in &#039;&#039;Windows Vista&#039;&#039; (or &#039;&#039;Windows 2008&#039;&#039;) or any later Windows version; it is &#039;&#039;&#039;not&#039;&#039;&#039; available for Windows XP/2003 (and never will be).&lt;br /&gt;
&lt;br /&gt;
The following video codecs are supported: [[MPEG|MPEG-1]], [[MPEG|MPEG-2]], [[Windows_Media|WMV3]], [[Windows_Media|VC-1]] and [[H.264|H.264 (MPEG-4 AVC)]].&lt;br /&gt;
&lt;br /&gt;
== X11 (GNU/Linux, FreeBSD, etc.) ==&lt;br /&gt;
&lt;br /&gt;
On Linux/X11, there are two competing interfaces for hardware video decoding, VA-API from [http://www.intel.com/ Intel], and VDPAU from [http://www.nvidia.com/ NVIDIA]. Generally, VAAPI is used for Intel and Broadcom graphic cards, while VDPAU is used for AMD/ATI and NVIDIA cards.&lt;br /&gt;
&lt;br /&gt;
=== VA-API ===&lt;br /&gt;
VA-API is supported for decoding only since VLC version &#039;&#039;&#039;1.1.0&#039;&#039;&#039;.&lt;br /&gt;
Refer to [[VLC_VAAPI]] for more details.&lt;br /&gt;
&lt;br /&gt;
On modern Ubuntu distributions, first install the hardware support (packages &#039;&#039;&#039;i965-va-driver&#039;&#039;&#039;, &#039;&#039;&#039;libva-intel-vaapi-driver&#039;&#039;&#039; and &#039;&#039;&#039;vainfo&#039;&#039;&#039;) and then activate GPU hardware acceleration in Preferences -&amp;gt; Input&amp;amp;Codecs.&lt;br /&gt;
&lt;br /&gt;
Install terminal command: &#039;&#039;sudo apt-get install i965-va-driver libva-intel-vaapi-driver vainfo&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following video codecs are supported: [[MPEG|MPEG-1]], [[MPEG|MPEG-2]], [[MPEG-4|MPEG-4 Visual]], [[Windows_Media|WMV3]], [[Windows_Media|VC-1]] and [[H.264|H.264 (MPEG-4 AVC)]].&lt;br /&gt;
&lt;br /&gt;
=== VDPAU ===&lt;br /&gt;
VDPAU is supported for decoding since VLC version &#039;&#039;&#039;2.1.0&#039;&#039;&#039;, and for post-processing and rendering since VLC &#039;&#039;&#039;2.2.0&#039;&#039;&#039; (still in development as of late 2013).&lt;br /&gt;
&lt;br /&gt;
VDPAU will be enabled automatically by default in VLC version 2.2.0 onward.&lt;br /&gt;
Refer to http://www.remlab.net/op/vlc-vdpau.shtml for technical details.&lt;br /&gt;
&lt;br /&gt;
The following video codecs are supported for decoding: [[MPEG|MPEG-1]], [[MPEG|MPEG-2]], [[MPEG-4|MPEG-4 Visual]] (and possibly H.263), [[Windows_Media|WMV3]], [[Windows_Media|VC-1]] and [[H.264|H.264 (MPEG-4 AVC)]]. Almost all video codecs are supported  for post-processing and rendering.&lt;br /&gt;
&lt;br /&gt;
== Mac OS X  ==&lt;br /&gt;
Video Decoding Acceleration (VDA) comes with MacOS X.6.3 and later (see [http://developer.apple.com/mac/library/technotes/tn2010/tn2267.html API]). This is somewhat supported in VLC 2.1.0.&lt;br /&gt;
&lt;br /&gt;
Only [[H.264|H.264 (MPEG-4 AVC)]] is supported currently.&lt;br /&gt;
&lt;br /&gt;
= Graphic card compatibility =&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
&lt;br /&gt;
To check your DxVA compatibility, please &#039;&#039;&#039;download [http://bluesky23.yukishigure.com/en/DXVAChecker.html DxVA Checker]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== nVidia  ===&lt;br /&gt;
&lt;br /&gt;
For nVidia GPU, you are &#039;&#039;&#039;required&#039;&#039;&#039; to use a GPU supporting [[wikipedia:Nvidia_PureVideo|PureVideo]] in its 2nd generation (VP2 or newer), which means that you need an [[wikipedia:Nvidia_Ion|ION]], [[wikipedia:GeForce_8_Series|GeForce 8]], [[wikipedia:GeForce_9_Series|GeForce 9]] (recpmmended), [[wikipedia:GeForce_200_Series|GeForce 200]] or newer. &lt;br /&gt;
&lt;br /&gt;
We strongly &#039;&#039;&#039;recommend&#039;&#039;&#039; a VP3 or VP4 GPU.&lt;br /&gt;
&lt;br /&gt;
To be sure, check your GPU against [[wikipedia:Nvidia_PureVideo#Table_of_PureVideo_.28HD.29_GPUs|this table on Wikipedia]] and check if you are VP2 or newer.&lt;br /&gt;
&lt;br /&gt;
=== ATI  ===&lt;br /&gt;
&lt;br /&gt;
For ATI GPUs, you &#039;&#039;&#039;NEED&#039;&#039;&#039; Catalyst 10.7, that is just out. &lt;br /&gt;
&lt;br /&gt;
Then, you are required to use a GPU supporting [http://en.wikipedia.org/wiki/Unified_Video_Decoder Unified Video Decoder]. &lt;br /&gt;
&lt;br /&gt;
We believe you need a [http://en.wikipedia.org/wiki/Unified_Video_Decoder#UVD_enabled_GPUs GPU supporting UVD2], like HD4xxx, 5xxx, 6xxx or 3200. One might have success with UVD+ GPU, like some HD 3xxx, but this isn&#039;t tested.&lt;br /&gt;
&lt;br /&gt;
=== Intel  ===&lt;br /&gt;
&lt;br /&gt;
Latest Intel GMA should work. Tested on GNU/Linux (Ubuntu 13.10) and hardware acceleration definitely works for Intel HD Graphics 3000 (dropped CPU usage for HD720 (1280 x 720, H.264, 24fps) from 12-13% to 6%).&lt;/div&gt;</summary>
		<author><name>Wilawar</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Set_file_specific_brightness_or_contrast&amp;diff=31260</id>
		<title>Set file specific brightness or contrast</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Set_file_specific_brightness_or_contrast&amp;diff=31260"/>
		<updated>2016-10-26T21:21:54Z</updated>

		<summary type="html">&lt;p&gt;Wilawar: --vout-filter apparently has been superseded by --video-filter (reported on IRC)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{howto|set specific brightness or contrast for a file}}&lt;br /&gt;
&lt;br /&gt;
First open Command Prompt/cmd.exe. A quick way of doing this is to go to:&amp;lt;br&amp;gt;&#039;&#039;&#039;Start&#039;&#039;&#039; &amp;amp;gt;&amp;amp;gt; &#039;&#039;&#039;Run&#039;&#039;&#039;. Then enter &amp;quot;&#039;&#039;&#039;cmd&#039;&#039;&#039;&amp;quot; and press Enter/OK.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Assuming you have VLC installed, to do it in one line, you can do something like:&#039;&#039;&#039;&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;    C:\Program Files\VideoLAN\VLC\vlc.exe [options] FILE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Where [options] are the commandline parameters and FILE is the location of the file you wish to play. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;For a two-line method, which is potentially faster for doing multiple instances etc.:&#039;&#039;&#039;&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;cd C:\Program Files\VideoLAN\VLC&lt;br /&gt;
vlc [options] FILE&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The commandline parameters for image properties are as follows:&#039;&#039;&#039;&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Image properties filter&lt;br /&gt;
      --contrast &amp;amp;lt;float&amp;amp;gt;         Image contrast (0-2)&lt;br /&gt;
      --brightness &amp;amp;lt;float&amp;amp;gt;       Image brightness (0-2)&lt;br /&gt;
      --hue &amp;amp;lt;integer&amp;amp;gt;            Image hue (0-360)&lt;br /&gt;
      --saturation &amp;amp;lt;float&amp;amp;gt;       Image saturation (0-3)&lt;br /&gt;
      --gamma &amp;amp;lt;float&amp;amp;gt;            Image gamma (0-10)&lt;br /&gt;
      --brightness-threshold, --no-brightness-threshold&lt;br /&gt;
                                 Brightness threshold (default disabled)&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The image adjust filter needs to be enabled so use:&#039;&#039;&#039;&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt; --video-filter adjust&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
To enable it.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Here is an example:&#039;&#039;&#039;&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt; vlc --video-filter adjust --brightness 1.8 --contrast 1.5 FILE&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{{VSG}}&lt;/div&gt;</summary>
		<author><name>Wilawar</name></author>
	</entry>
</feed>