<div dir="ltr">Attached is a revised patch based on jb's feedback<br><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">> Your indentation is too small (2 instead of 4).<br><span class="im"></span>
Good Spot I dunno how I missed that<br></blockquote><div>I tried 2 different editors and it appears as 4 even in the first attempt.<br><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Mar 3, 2015 at 12:45 PM, Martell Malone <span dir="ltr"><<a href="mailto:martellmalone@gmail.com" target="_blank">martellmalone@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><span class=""><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">>>  <a href="http://configure.ac" target="_blank">configure.ac</a>                          |   7 +-<br>
>>  modules/MODULES_LIST                  |   1 +<br>
>>  modules/video_output/Makefile.am      |  16 +<br>
>>  modules/video_output/msw/common.c     |  33 +-<br>
>>  modules/video_output/msw/common.h     |  46 +-<br>
>>  modules/video_output/msw/direct3d11.c | 940 ++++++++++++++++++++++++++++++++++<br>
>>  modules/video_output/msw/events.c     |  17 +-<br>
>>  7 files changed, 1049 insertions(+), 11 deletions(-)<br>
>>  create mode 100644 modules/video_output/msw/direct3d11.c<br>
<br>
Missing NEWS and po/POTFILES.in entry</blockquote></span><div>I've no idea what to put in there, suggestions are welcome.<br></div><div>I will look at previous NEWS and POTFILES to get an idea.<span class=""><br><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">>> diff --git a/modules/video_output/msw/common.c b/modules/video_output/msw/common.c<br>
>> index 1ebe08c..802450d 100644<br>
>> --- a/modules/video_output/msw/common.c<br>
>> +++ b/modules/video_output/msw/common.c<br>
>> @@ -4,7 +4,8 @@<br>
>>   * Copyright (C) 2001-2009 VLC authors and VideoLAN<br>
>>   * $Id$<br>
>>   *<br>
>> - * Authors: Gildas Bazin <<a href="mailto:gbazin@videolan.org" target="_blank">gbazin@videolan.org</a>><br>
>> + * Authors: Martell Malone <<a href="mailto:martellmalone@gmail.com" target="_blank">martellmalone@gmail.com</a>>,<br>
>> + *          Gildas Bazin <<a href="mailto:gbazin@videolan.org" target="_blank">gbazin@videolan.org</a>><br>
<br>
No, you don't put yourself first. <br></blockquote></span><div>My mistake I copy and pasted it from direct3d11.c <br>I will move my name to last for these<span class=""><br><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">>> +#ifdef MODULE_NAME_IS_direct3d11<br>
>> +#if !VLC_WINSTORE_APP<br>
>> +    HINSTANCE                hdxgi_dll;        /* handle of the opened dxgi dll */<br>
>> +    HINSTANCE                hd3d11_dll;       /* handle of the opened d3d11 dll */<br>
>> +    HINSTANCE                hd3dcompiler_dll; /* handle of the opened d3dcompiler dll */<br>
<br>
Those 3 are linked in, for WinRT? <br></blockquote></span><div>Only d3dcompiler is linked in for WinRT.<br></div><div>The other two are not needed.<br></div><div>I have a patch to submit to mingw-w64 to add d3dcompiler_47 the windows 8.1 version.<span class=""><br><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">>> +    IDXGIAdapter             *dxgiadapter;     /* DXGI adapter */<br>
>> +    IDXGIFactory             *dxgifactory;     /* DXGI factory */<br>
>> +    IDXGISwapChain           *dxgiswapChain;   /* DXGI 1.0 swap chain */<br>
>> +    /* We should find a better way to store this or atleast a shorter name */<br>
>> +    PFN_D3D11_CREATE_DEVICE_AND_SWAP_CHAIN OurD3D11CreateDeviceAndSwapChain;<br>
>> +    PFN_D3D11_CREATE_DEVICE                OurD3D11CreateDevice;<br>
>> +    pD3DCompile                            OurD3DCompile;<br>
>> +#else<br>
>> +    IDXGISwapChain1          *dxgiswapChain;   /* DXGI 1.1 swap chain */<br>
>> +#endif<br>
>> +    ID3D11Device             *d3ddevice;       /* D3D device */<br>
>> +    ID3D11DeviceContext      *d3dcontext;      /* D3D context */<br>
>> +    ID3D11Texture2D          *d3dtexture;<br>
<br>
Only 1 texture?<br></blockquote></span>There is 2 <br><span class="">>> +    ID3D11ShaderResourceView *d3dresViewY;<br>
>> +    ID3D11ShaderResourceView *d3dresViewUV;<br></span>the naming in the dx11 api is a bit misleading.<br>You have a texture which is more of a surface than a texture.<br>and then this can have any number of resource views which are technically the textures.<br></div><div>Thank Microsoft here for confusing everyone. :)<span class=""><br><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">>> +    DXGI_FORMAT              d3dFormat;<br>
>> +    vlc_fourcc_t             vlcFormat;<br>
format of ? <br></blockquote></span></div>>> +    vd->sys->vlcFormat = d3d_formats[0].fourcc;<br><br>>> +    video_format_t fmt;<br><br></div><div>Many of the if statements that were using fmt were failing in createresources, update etc if i set fmt directly.<br>Rather than wasting time on this issue I stored it.<br></div><div>I can have a second look at this if you want?<span class=""><br><br>>> +/* avoided until we can deal with c++/cx in gcc<br>
hahah. no.<br><br></span></div><div>I could have explained that with a better comment.<br></div><div>We need a way to pass a pointer to SwapChainPanel from the WinRT app rather than the cx reference ^ it is doing atm.<br></div><div>I don't know why I even said it that way :) <br><span class=""><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">>> +    ID3D11VertexShader       *d3dvertexShader;<br>
>> +    ID3D11PixelShader        *d3dpixelShader;<br>
>> +    ID3D11InputLayout        *d3dvertexLayout;<br>
>> +    ID3D11SamplerState       *d3dsampState;<br>
>> +    picture_sys_t            *picsys;<br>
<br>
picsys seems wrong<br></blockquote></span></div><div>We need this to pass it to lock. In the dx11 case it is called map.<br>picture_resource_t resource = { .p_sys = picsys };<br></div><div>This is the same way it is done in the directx9 plugin.<span class=""><br><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">> +#define D3D11_HELP N_("Recommended video output for Windows RT and Windows Phone")<br>
<br>
Nah, bad description.<br></blockquote></span></div><div>Have you replacement text?<span class=""><br><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">>> +static const d3d_format_t d3d_formats[] = {<br>
>> +    { "NV12",   DXGI_FORMAT_NV12,             VLC_CODEC_NV12  },<br>
>> +    { "RGBA",   DXGI_FORMAT_R8G8B8A8_UNORM,   VLC_CODEC_RGBA  },<br>
>> +    { NULL, 0, 0 }<br>
>> +};<br>
<br>
Where is YV12 ?<br></blockquote></span></div><div>From under DXGI_FORMAT_420_OPAQUE on<br><a href="https://msdn.microsoft.com/en-us/library/windows/desktop/bb173059%28v=vs.85%29.aspx" target="_blank">https://msdn.microsoft.com/en-us/library/windows/desktop/bb173059%28v=vs.85%29.aspx</a><br><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">"Applications cannot use the CPU to map the resource and then access the 
data within the resource.<br>You cannot use shaders with this format."<br></blockquote><div> </div></div><div>The format will only become usable when I add ID3D11Video hardware accelerated decoding.<br></div>I will add it at that stage :)<span class=""><br><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">>> +#if VLC_WINSTORE_APP<br>
>> +    DXGI_SWAP_CHAIN_DESC1 scd;<br>
>> +#else<br>
>> +    DXGI_SWAP_CHAIN_DESC scd;<br>
>> +#endif<br>
<br>
Why not using one define at the top and use that in the code?<br></blockquote></span></div><div>I'm not quite sure what you mean?<br></div><div>If you give me an example I'll gladly do it.<br><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">>> +#if 0<br>
Why ?<br></blockquote><br></div><div>I left this comment above the first one in the code explaining them<br><br></div><div><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">/* All the #if 0 contain an alternative method to setup dx11<br>   They both need to be benchmarked to see which performs better */<br>#if 0<br></blockquote></div><div>There is 2 ways to setup dx11. <br>I just don't know which is better and what devices support which, speed of each etc.<span class=""><br><br><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">Your indentation is too small (2 instead of 4).<br></blockquote></span>
Good Spot I dunno how I missed that.<br></div><div><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">
The rest looks good.</blockquote><div>:) <br></div></div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Mar 3, 2015 at 10:44 AM, Jean-Baptiste Kempf <span dir="ltr"><<a href="mailto:jb@videolan.org" target="_blank">jb@videolan.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 03 Mar, Martell Malone wrote :<br>
<span>> Attached is the directx11 vout that I have been working on.<br>
<br>
</span>>>  <a href="http://configure.ac" target="_blank">configure.ac</a>                          |   7 +-<br>
>>  modules/MODULES_LIST                  |   1 +<br>
>>  modules/video_output/Makefile.am      |  16 +<br>
>>  modules/video_output/msw/common.c     |  33 +-<br>
>>  modules/video_output/msw/common.h     |  46 +-<br>
>>  modules/video_output/msw/direct3d11.c | 940 ++++++++++++++++++++++++++++++++++<br>
>>  modules/video_output/msw/events.c     |  17 +-<br>
>>  7 files changed, 1049 insertions(+), 11 deletions(-)<br>
>>  create mode 100644 modules/video_output/msw/direct3d11.c<br>
<br>
Missing NEWS and po/POTFILES.in entry.<br>
<br>
>> diff --git a/modules/video_output/msw/common.c b/modules/video_output/msw/common.c<br>
>> index 1ebe08c..802450d 100644<br>
>> --- a/modules/video_output/msw/common.c<br>
>> +++ b/modules/video_output/msw/common.c<br>
>> @@ -4,7 +4,8 @@<br>
>>   * Copyright (C) 2001-2009 VLC authors and VideoLAN<br>
>>   * $Id$<br>
>>   *<br>
>> - * Authors: Gildas Bazin <<a href="mailto:gbazin@videolan.org" target="_blank">gbazin@videolan.org</a>><br>
>> + * Authors: Martell Malone <<a href="mailto:martellmalone@gmail.com" target="_blank">martellmalone@gmail.com</a>>,<br>
>> + *          Gildas Bazin <<a href="mailto:gbazin@videolan.org" target="_blank">gbazin@videolan.org</a>><br>
<br>
No, you don't put yourself first.<br>
<br>
>> index 5cb8c45..b02fa27 100644<br>
>> --- a/modules/video_output/msw/common.h<br>
>> +++ b/modules/video_output/msw/common.h<br>
>> @@ -4,7 +4,8 @@<br>
>>   * Copyright (C) 2001-2009 VLC authors and VideoLAN<br>
>>   * $Id$<br>
>>   *<br>
>> - * Authors: Gildas Bazin <<a href="mailto:gbazin@videolan.org" target="_blank">gbazin@videolan.org</a>><br>
>> + * Authors: Martell Malone <<a href="mailto:martellmalone@gmail.com" target="_blank">martellmalone@gmail.com</a>>,<br>
>> + *          Gildas Bazin <<a href="mailto:gbazin@videolan.org" target="_blank">gbazin@videolan.org</a>>,<br>
<br>
idem.<br>
<br>
> @@ -25,6 +26,15 @@<br>
>> +#ifdef MODULE_NAME_IS_direct3d11<br>
>> +# include <d3d11.h><br>
>> +#if VLC_WINSTORE_APP<br>
>> +# include <dxgi1_2.h><br>
>> +#else<br>
>> +# include <dxgi.h><br>
>> +#endif<br>
>> +# include <d3dcompiler.h><br>
>> +#endif<br>
<br>
Please indent your ifs,<br>
<br>
>> +#ifdef MODULE_NAME_IS_direct3d11<br>
>> +#if !VLC_WINSTORE_APP<br>
>> +    HINSTANCE                hdxgi_dll;        /* handle of the opened dxgi dll */<br>
>> +    HINSTANCE                hd3d11_dll;       /* handle of the opened d3d11 dll */<br>
>> +    HINSTANCE                hd3dcompiler_dll; /* handle of the opened d3dcompiler dll */<br>
<br>
Those 3 are linked in, for WinRT?<br>
<br>
>> +    IDXGIAdapter             *dxgiadapter;     /* DXGI adapter */<br>
>> +    IDXGIFactory             *dxgifactory;     /* DXGI factory */<br>
>> +    IDXGISwapChain           *dxgiswapChain;   /* DXGI 1.0 swap chain */<br>
>> +    /* We should find a better way to store this or atleast a shorter name */<br>
>> +    PFN_D3D11_CREATE_DEVICE_AND_SWAP_CHAIN OurD3D11CreateDeviceAndSwapChain;<br>
>> +    PFN_D3D11_CREATE_DEVICE                OurD3D11CreateDevice;<br>
>> +    pD3DCompile                            OurD3DCompile;<br>
>> +#else<br>
>> +    IDXGISwapChain1          *dxgiswapChain;   /* DXGI 1.1 swap chain */<br>
>> +#endif<br>
>> +    ID3D11Device             *d3ddevice;       /* D3D device */<br>
>> +    ID3D11DeviceContext      *d3dcontext;      /* D3D context */<br>
>> +    ID3D11Texture2D          *d3dtexture;<br>
<br>
Only 1 texture?<br>
<br>
>> +    ID3D11ShaderResourceView *d3dresViewY;<br>
>> +    ID3D11ShaderResourceView *d3dresViewUV;<br>
>> +    ID3D11RenderTargetView   *d3drenderTargetView;<br>
>> +    ID3D11DepthStencilView   *d3ddepthStencilView;<br>
>> +    ID3D11VertexShader       *d3dvertexShader;<br>
>> +    ID3D11PixelShader        *d3dpixelShader;<br>
>> +    ID3D11InputLayout        *d3dvertexLayout;<br>
>> +    ID3D11SamplerState       *d3dsampState;<br>
>> +    picture_sys_t            *picsys;<br>
<br>
picsys seems wrong<br>
<br>
>> +    D3D_FEATURE_LEVEL        d3dfeaturelevel;<br>
>> +    DXGI_FORMAT              d3dFormat;<br>
>> +    vlc_fourcc_t             vlcFormat;<br>
<br>
format of ?<br>
>> +#endif<br>
>> +<br>
<br>
>> +/* avoided until we can deal with c++/cx in gcc<br>
hahah. no.<br>
<br>
> +#define D3D11_HELP N_("Recommended video output for Windows RT and Windows Phone")<br>
<br>
Nah, bad description.<br>
<br>
>> +static const d3d_format_t d3d_formats[] = {<br>
>> +    { "NV12",   DXGI_FORMAT_NV12,             VLC_CODEC_NV12  },<br>
>> +    { "RGBA",   DXGI_FORMAT_R8G8B8A8_UNORM,   VLC_CODEC_RGBA  },<br>
>> +    { NULL, 0, 0 }<br>
>> +};<br>
<br>
Where is YV12 ?<br>
<br>
>> +#if VLC_WINSTORE_APP<br>
>> +    DXGI_SWAP_CHAIN_DESC1 scd;<br>
>> +#else<br>
>> +    DXGI_SWAP_CHAIN_DESC scd;<br>
>> +#endif<br>
<br>
Why not using one define at the top and use that in the code?<br>
<br>
>> +#if 0<br>
<br>
Why ?<br>
<br>
>> +<br>
>> +    /* TODO : list adapters for the user to choose from */<br>
>> +    hr = IDXGIFactory_EnumAdapters(sys->dxgifactory, 0, &sys->dxgiadapter);<br>
>> +    if (FAILED(hr)) {<br>
>> +       msg_Err(vd, "Could not create find factory. (hr=0x%lX)", hr);<br>
>> +       return VLC_EGENERIC;<br>
>> +    }<br>
>> +<br>
>> +    IDXGIOutput* output;<br>
>> +    hr = IDXGIAdapter_EnumOutputs(sys->dxgiadapter, 0, &output);<br>
>> +    if (FAILED(hr)) {<br>
>> +       msg_Err(vd, "Could not Enumerate DXGI Outputs. (hr=0x%lX)", hr);<br>
>> +       return VLC_EGENERIC;<br>
>> +    }<br>
>> +<br>
>> +    DXGI_MODE_DESC md;<br>
>> +    memset(&md, 0, sizeof(md));<br>
>> +    md.Width  = fmt->i_visible_width;<br>
>> +    md.Height = fmt->i_visible_height;<br>
>> +    md.Format = scd.BufferDesc.Format;<br>
>> +    md.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;<br>
>> +<br>
>> +    hr = IDXGIOutput_FindClosestMatchingMode(output, &md, &scd.BufferDesc, NULL);<br>
>> +    if (FAILED(hr)) {<br>
>> +       msg_Err(vd, "Failed to find a supported video mode. (hr=0x%lX)", hr);<br>
>> +       return VLC_EGENERIC;<br>
>> +    }<br>
>> +<br>
>> +    /* mode desc doesn't carry over the width and height*/<br>
>> +    scd.BufferDesc.Width = fmt->i_visible_width;<br>
>> +    scd.BufferDesc.Height = fmt->i_visible_height;<br>
>> +<br>
>> +    hr = D3D11CreateDeviceAndSwapChain(sys->dxgiadapter,<br>
>> +                    D3D_DRIVER_TYPE_UNKNOWN, NULL, creationFlags,<br>
>> +                    featureLevels, ARRAYSIZE(featureLevels),<br>
>> +                    D3D11_SDK_VERSION, &scd, &sys->dxgiswapChain,<br>
>> +                    &sys->d3ddevice, &sys->d3dfeaturelevel, &sys->d3dcontext);<br>
>> +    if (FAILED(hr)) {<br>
>> +       msg_Err(vd, "Could not Create the D3D11 device and SwapChain. (hr=0x%lX)", hr);<br>
>> +       return VLC_EGENERIC;<br>
>> +    }<br>
>> +<br>
>> +#else<br>
>> +<br>
>> +    static const D3D_DRIVER_TYPE driverAttempts[] = {<br>
>> +        D3D_DRIVER_TYPE_HARDWARE,<br>
>> +        D3D_DRIVER_TYPE_WARP,<br>
>> +        D3D_DRIVER_TYPE_REFERENCE,<br>
>> +    };<br>
>> +<br>
>> +    for (UINT driver = 0; driver < ARRAYSIZE(driverAttempts); driver++) {<br>
>> +        hr = D3D11CreateDevice(NULL, driverAttempts[driver], NULL, creationFlags,<br>
>> +                    featureLevels, ARRAYSIZE(featureLevels), D3D11_SDK_VERSION,<br>
>> +                    &sys->d3ddevice, &sys->d3dfeaturelevel, &sys->d3dcontext);<br>
>> +        if (SUCCEEDED(hr)) break;<br>
>> +    }<br>
>> +<br>
>> +    if (FAILED(hr)) {<br>
>> +       msg_Err(vd, "Could not Create the D3D11 device. (hr=0x%lX)", hr);<br>
>> +       return VLC_EGENERIC;<br>
>> +    }<br>
>> +<br>
>> +    IDXGIDevice *pDXGIDevice = NULL;<br>
>> +    hr = ID3D11Device_QueryInterface(sys->d3ddevice, &IID_IDXGIDevice, (void **)&pDXGIDevice);<br>
>> +    if (FAILED(hr)) {<br>
>> +       msg_Err(vd, "Could not Query DXGI Interface. (hr=0x%lX)", hr);<br>
>> +       return VLC_EGENERIC;<br>
>> +    }<br>
>> +<br>
>> +    hr = IDXGIDevice_GetAdapter(pDXGIDevice, &sys->dxgiadapter);<br>
>> +    if (FAILED(hr)) {<br>
>> +       msg_Err(vd, "Could not get the DXGI Adapter. (hr=0x%lX)", hr);<br>
>> +       return VLC_EGENERIC;<br>
>> +    }<br>
>> +<br>
>> +    hr = IDXGIAdapter_GetParent(sys->dxgiadapter, &IID_IDXGIFactory, (void **)&sys->dxgifactory);<br>
>> +    if (FAILED(hr)) {<br>
>> +       msg_Err(vd, "Could not get the DXGI Factory. (hr=0x%lX)", hr);<br>
>> +       return VLC_EGENERIC;<br>
>> +    }<br>
>> +<br>
>> +#if VLC_WINSTORE_APP<br>
>> +    hr = IDXGIFactory2_CreateSwapChainForComposition(sys->dxgifactory, (IUnknown *)sys->d3ddevice, &scd, NULL, &sys->dxgiswapChain);<br>
>> +#else<br>
>> +    hr = IDXGIFactory_CreateSwapChain(sys->dxgifactory, (IUnknown *)sys->d3ddevice, &scd, &sys->dxgiswapChain);<br>
>> +#endif<br>
>> +<br>
>> +    if (FAILED(hr)) {<br>
>> +       msg_Err(vd, "Could not create the SwapChain. (hr=0x%lX)", hr);<br>
>> +       return VLC_EGENERIC;<br>
>> +    }<br>
>> +<br>
>> +#if VLC_WINSTORE_APP /* avoided until we can deal with c++/cx in gcc */<br>
>> +    /* TODO: figure out how to get "ISwapChainPanel ^panel" into brokenpanel in gcc */<br>
>> +    ISwapChainPanel *brokenpanel;<br>
>> +    ISwapChainPanelNative *panelNative;<br>
>> +    hr = ISwapChainPanelNative_QueryInterface(brokenpanel, &IID_ISwapChainPanelNative, (void **)&pDXGIDevice);<br>
>> +    if (FAILED(hr)) {<br>
>> +       msg_Err(vd, "Could not get the Native Panel. (hr=0x%lX)", hr);<br>
>> +       return VLC_EGENERIC;<br>
>> +    }<br>
>> +<br>
>> +    hr = ISwapChainPanelNative_SetSwapChain(panelNative, sys->dxgiswapChain);<br>
>> +    if (FAILED(hr)) {<br>
>> +       msg_Err(vd, "Could not link the SwapChain with the Native Panel. (hr=0x%lX)", hr);<br>
>> +       return VLC_EGENERIC;<br>
>> +    }<br>
>> +<br>
>> +#endif<br>
>> +<br>
>> +#endif<br>
>> +<br>
>> +#endif<br>
>> +<br>
<br>
Your indentation is too small (2 instead of 4).<br>
<br>
The rest looks good.<br>
<span><font color="#888888"><br>
--<br>
Jean-Baptiste Kempf<br>
<a href="http://www.jbkempf.com/" target="_blank">http://www.jbkempf.com/</a> - <a href="tel:%2B33%20672%20704%20734" value="+33672704734" target="_blank">+33 672 704 734</a><br>
Sent from my Electronic Device<br>
_______________________________________________<br>
vlc-devel mailing list<br>
To unsubscribe or modify your subscription options:<br>
<a href="https://mailman.videolan.org/listinfo/vlc-devel" target="_blank">https://mailman.videolan.org/listinfo/vlc-devel</a><br>
</font></span></blockquote></div><br></div>
</div></div></blockquote></div><br></div>