<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://eleves.ec-lille.fr/~couprieg/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Le fourre-tout à Geo - VideoLAN</title>
  <link>http://eleves.ec-lille.fr/~couprieg/</link>
  <atom:link href="http://eleves.ec-lille.fr/~couprieg/feed/category/Videolan/rss2" rel="self" type="application/rss+xml"/>
  <description>Software development, security, overkill solutions, and fun code!</description>
  <language>fr</language>
  <pubDate>Thu, 04 Feb 2010 18:36:12 +0000</pubDate>
  <copyright>&lt;p&gt;Copyright © 2007-2009 &lt;a href=&quot;http://eleves.ec-lille.fr/~couprieg&quot;&gt;Geoffroy Couprie&lt;/a&gt;&lt;/p&gt;</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Utterly useless uses of VLC</title>
    <link>http://eleves.ec-lille.fr/~couprieg/post/Flickr-diaporama-in-VLC</link>
    <guid isPermaLink="false">urn:md5:9da61235c84b13dade01bd21d46f16d9</guid>
    <pubDate>Tue, 08 Dec 2009 08:22:00 +0000</pubDate>
    <dc:creator>Geoffroy Couprie</dc:creator>
        <category>VideoLAN</category>
        <category>Lua</category><category>VLC media player</category>    
    <description>    &lt;p&gt;Last time, I told you how to &lt;a href=&quot;http://eleves.ec-lille.fr/~couprieg/post/2009/04/11/55-vlc-tricks-lua-playlist&quot;&gt;take a video from some website and see it in VLC media player&lt;/a&gt;. Pretty cool, huh?&lt;/p&gt;


&lt;p&gt;Yesterday, I was trying to think of funny and useless thing to do with VLC, and it occured to me that Lua gives a lot of opportunities to do that.&lt;/p&gt;


&lt;p&gt;So, it is my pleasure to present you with the &quot;Flickr diaporama Lua script for VLC&quot;!&lt;/p&gt;

&lt;pre&gt;
--[[

 Copyright © 2009 the VideoLAN team

 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
--]]

-- Probe function.
function probe()
    if vlc.access ~= &amp;quot;http&amp;quot; then
        return false
    end
    vlc.msg.info( vlc.path )
	koreus_site = string.match( vlc.path, &amp;quot;www.flickr.com&amp;quot; )
    if not koreus_site then
        return false
    end
    return (  string.match( vlc.path, &amp;quot;sets&amp;quot; )  )
end

-- Parse function.
function parse()
    _,_,artist = string.find( vlc.path, &amp;quot;photos/(.-)/sets/&amp;quot; )
    vlc.msg.info( artist )
    while true do
        line = vlc.readline()
        if not line then break end
        if string.match( line,&amp;quot;&amp;lt;div id=\&amp;quot;setThumbs\&amp;quot;&amp;quot;) then
            start = 0
            pl = {}
            line = vlc.readline()
            while true do
                _,start,url = string.find(line, &amp;quot;&amp;lt;img src=\&amp;quot;(.-)_s.jpg\&amp;quot;&amp;quot;, start)
                if start == nil then
                    return pl
                end
                _,_,description = string.find(line, &amp;quot;alt=\&amp;quot;(.-)\&amp;quot;&amp;quot;, start)
                opt = { &amp;quot;:fake-duration=5000&amp;quot;; &amp;quot;:fullscreen&amp;quot; }
                pth = &amp;quot;fake://&amp;quot; .. url .. &amp;quot;.jpg&amp;quot;
                table.insert(pl, {path = pth; name = start; title=description; 
                description = description; artist = artist;options=opt})
            end
        end
    end
end
&lt;/pre&gt;


&lt;p&gt;So, how does it work? Give some Flickr album url to VLC, like &lt;a href=&quot;http://www.flickr.com/photos/fernandofelix/sets/72157603899036321/&quot; hreflang=&quot;en&quot;&gt;this one&lt;/a&gt; with the funny cats. VLC will parse the page, find all the thumbnails urls (the ones finishing with _s.jpg), deduce the urls of the the full pictures (replacing &quot;_s.jpg&quot; by &quot;.jpg&quot;), and show them. As simple as that.&lt;/p&gt;


&lt;p&gt;The fake access module is used to tell VLC that &quot;hey, this is not one picture, it's a video with a lot of frames like this picture&quot;. I added the &quot;fake-duration&quot; option, to choose how much time (in ms) the picture will be displayed, and the &quot;fullscreen&quot; option. You can of course tweak it, and, let's say, use the directx wallpaper mode to have a flickr diaporama as your wallpaper!&lt;/p&gt;


&lt;p&gt;To use this script, you can either place it in &lt;em&gt;C:\Program Files\VideoLAN\VLC\lua\playlist&lt;/em&gt;, or in &lt;em&gt;C:\Users\YOURUSERNAME\AppData\Roaming\vlc\lua\playlist&lt;/em&gt;.&lt;/p&gt;


&lt;p&gt;I strongly encourage you to try and write your own Lua scripts, it's really easy! Come to the &lt;a href=&quot;http://forum.videolan.org/viewforum.php?f=29&quot; hreflang=&quot;en&quot;&gt;Videolan forum&lt;/a&gt; to share your scripts or ask for help.&lt;/p&gt;


&lt;h3&gt;See also&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://eleves.ec-lille.fr/~couprieg/post/2009/04/11/55-vlc-tricks-lua-playlist&quot;&gt;VLC tricks: Lua playlist&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;    &lt;p&gt;Copyright © 2007-2009 &lt;a href=&quot;http://eleves.ec-lille.fr/~couprieg&quot;&gt;Geoffroy Couprie&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://eleves.ec-lille.fr/~couprieg/post/Flickr-diaporama-in-VLC#comment-form</comments>
      <wfw:comment>http://eleves.ec-lille.fr/~couprieg/post/Flickr-diaporama-in-VLC#comment-form</wfw:comment>
      <wfw:commentRss>http://eleves.ec-lille.fr/~couprieg/feed/atom/comments/82</wfw:commentRss>
      </item>
    
  <item>
    <title>VLC: now with DxVA support</title>
    <link>http://eleves.ec-lille.fr/~couprieg/post/VLC-now-with-DxVA-support</link>
    <guid isPermaLink="false">urn:md5:c930a99002af002a16892545c09bcbda</guid>
    <pubDate>Wed, 25 Nov 2009 22:55:00 +0000</pubDate>
    <dc:creator>Geoffroy Couprie</dc:creator>
        <category>VideoLAN</category>
        <category>DxVA</category><category>GPU</category><category>VLC media player</category>    
    <description>    &lt;p&gt;So, this is it. My summer of code has been &lt;a href=&quot;http://git.videolan.org/?p=vlc.git;a=commitdiff;h=670ef981c72d124788cf5862562de6541428e7e6;hp=0c348182e3823d80f703518d6734222f3bdce825&quot; hreflang=&quot;en&quot;&gt;merged into the main tree&lt;/a&gt;, thanks to Laurent's &lt;a href=&quot;http://git.videolan.org/?p=vlc.git;a=commitdiff;h=e0028dbfcdf1671fb4c503336fe10684d3724d51&quot; hreflang=&quot;en&quot;&gt;hard work&lt;/a&gt;!&lt;/p&gt;


&lt;p&gt;You may test and enjoy the GPU acceleration for your H.264 videos using future &lt;a href=&quot;http://nightlies.videolan.org/build/win32/?C=M;O=D&quot; hreflang=&quot;en&quot;&gt;nightly builds&lt;/a&gt;!&lt;/p&gt;    &lt;p&gt;Copyright © 2007-2009 &lt;a href=&quot;http://eleves.ec-lille.fr/~couprieg&quot;&gt;Geoffroy Couprie&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://eleves.ec-lille.fr/~couprieg/post/VLC-now-with-DxVA-support#comment-form</comments>
      <wfw:comment>http://eleves.ec-lille.fr/~couprieg/post/VLC-now-with-DxVA-support#comment-form</wfw:comment>
      <wfw:commentRss>http://eleves.ec-lille.fr/~couprieg/feed/atom/comments/80</wfw:commentRss>
      </item>
    
  <item>
    <title>So you want to contribute...</title>
    <link>http://eleves.ec-lille.fr/~couprieg/post/So-you-want-to-contribute</link>
    <guid isPermaLink="false">urn:md5:f1df94e9ad900628b9563e5742c8299c</guid>
    <pubDate>Mon, 23 Nov 2009 20:30:00 +0000</pubDate>
    <dc:creator>Geoffroy Couprie</dc:creator>
        <category>VideoLAN</category>
        <category>development</category><category>VLC media player</category>    
    <description>    &lt;p&gt;...But you don't want to go through the (sometimes painful) process of building the whole VLC. Well, you can  &lt;a href=&quot;http://wiki.videolan.org/OutOfTreeCompile&quot; hreflang=&quot;en&quot;&gt;build your own plugin separately&lt;/a&gt;. Here is how to do it (this tutorial is Windows centric because 1: I'm too lazy to launch my VM right now; 2:&lt;a href=&quot;http://www.jbkempf.com/blog/post/2009/03/03/Howto-build-VLC-1.0.0-git-in-Ubuntu-in-less-than-5-commands&quot; hreflang=&quot;en&quot;&gt;it's easy to do on Ubuntu&lt;/a&gt; for the linux trolls):&lt;/p&gt;


&lt;h4&gt;Ingredients&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;The plugin headers. You can find them in &lt;em&gt;C:\Program Files\VideoLAN\VLC\sdk\include\vlc\plugins&lt;/em&gt; on Windows.&lt;/li&gt;
&lt;li&gt;The libraries. Copy libvlc.dll and libvlccore.dll (you will find them in  &lt;em&gt;C:\Program Files\VideoLAN\VLC&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;A building environment (on Windows, use Mingw+MSYS)&lt;/li&gt;
&lt;li&gt;Some coffee&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Recipe&lt;/h4&gt;

&lt;p&gt;At the time of writing, the &lt;a href=&quot;http://wiki.videolan.org/OutOfTreeCompile&quot; hreflang=&quot;en&quot;&gt;wiki page&lt;/a&gt; wasn't really explicit, so I'll detail all the steps, for an example audio filter that switch the left and right audio streams (adapted from the trivial channel mixer plugin).&lt;/p&gt;


&lt;p&gt;Let's begin by taking a look at what code you can find in a VLC plugin, like the &lt;a href=&quot;http://git.videolan.org/?p=vlc.git;a=blob;f=modules/audio_filter/channel_mixer/trivial.c;h=3ecc0dd8363a50c40f7f123a9e2724a943c0c83c;hb=HEAD&quot; hreflang=&quot;en&quot;&gt;trivial channel mixer plugin&lt;/a&gt;.&lt;/p&gt;


&lt;h5&gt;Preamble&lt;/h5&gt;

&lt;p&gt;First, the copyright and license:&lt;/p&gt;

&lt;pre&gt;
/*****************************************************************************
 * trivial.c : trivial channel mixer plug-in (drops unwanted channels)
 *****************************************************************************
 * Copyright (C) 2009 the VideoLAN team
 * $Id: 3ecc0dd8363a50c40f7f123a9e2724a943c0c83c $
 *
 * Authors: Name &amp;lt;email address&amp;gt;
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
 *****************************************************************************/
&lt;/pre&gt;


&lt;p&gt;That's not useful to run the plugin, but you'll have to add it when you send a patch to VideoLAN.&lt;/p&gt;


&lt;p&gt;Next, the headers:&lt;/p&gt;

&lt;pre&gt;
#ifdef HAVE_CONFIG_H
# include &amp;quot;config.h&amp;quot;
#endif

#include &amp;lt;vlc_common.h&amp;gt;
#include &amp;lt;vlc_plugin.h&amp;gt;
#include &amp;lt;vlc_aout.h&amp;gt;
#include &amp;lt;vlc_filter.h&amp;gt;
&lt;/pre&gt;


&lt;p&gt;the &lt;em&gt;config.h&lt;/em&gt; file is generated from the configure step when you build the whole VLC. Each module must include  at least &lt;em&gt;vlc_common.h&lt;/em&gt; and &lt;em&gt;vlc_plugin.h&lt;/em&gt;. The other headers included depend on the type of plugin you want to build (find it in the code of plugins from the category you want).&lt;/p&gt;


&lt;p&gt;Note: you will probably need something more like the following for your audio plugin.&lt;/p&gt;

&lt;pre&gt;
#define _(str)  (str)
#define N_(str) (str)

#include &amp;lt;vlc_common.h&amp;gt;
#include &amp;lt;vlc_plugin.h&amp;gt;
#include &amp;lt;vlc_messages.h&amp;gt;
#include &amp;lt;vlc_aout.h&amp;gt;
#include &amp;lt;vlc_filter.h&amp;gt;
#include &amp;lt;vlc_fourcc.h&amp;gt;
#include &amp;lt;vlc_block.h&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Don't hesitate to grep the include directory if you have some missing functions or unknown structures.&lt;/p&gt;


&lt;h5&gt;Module descriptor&lt;/h5&gt;
&lt;pre&gt;
static int  Create    ( vlc_object_t * );

static block_t *DoWork( filter_t *, block_t * );

vlc_module_begin ()
    set_description( N_(&amp;quot;Audio channel inverser&amp;quot;) )
    set_capability( &amp;quot;channel inverser&amp;quot;, 1 )
    set_category( CAT_AUDIO )
    set_subcategory( SUBCAT_AUDIO_MISC )
    set_callbacks( Create, NULL )
    add_shortcut( &amp;quot;channel_inverser&amp;quot; )
vlc_module_end ()
&lt;/pre&gt;


&lt;p&gt;First, you see the prototypes of functions used in this plugin. &lt;em&gt;Create&lt;/em&gt; is used, well, to create the plugin, and &lt;em&gt;DoWork&lt;/em&gt; will handle all the audio data.&lt;/p&gt;


&lt;p&gt;Then, the part between &lt;em&gt;vlc_module_begin&lt;/em&gt; and &lt;em&gt;vlc_module_end&lt;/em&gt; is a set of macros used to declare the plugin structure. This part is used to define which type of module it will be. These macros create a function exported by the plugin and called when VLC looks for a suitable plugin.&lt;/p&gt;


&lt;p&gt;If the module can be used, the core of VLC stores the callback (here, the &lt;em&gt;Create&lt;/em&gt; function) and calls it later to initialize the plugin.&lt;/p&gt;


&lt;h5&gt;Create function&lt;/h5&gt;

&lt;pre&gt;
static int Create( vlc_object_t *p_this )
{
    filter_t * p_filter = (filter_t *)p_this;

    if ( (p_filter-&amp;gt;fmt_in.audio.i_physical_channels
           == p_filter-&amp;gt;fmt_out.audio.i_physical_channels
           &amp;amp;&amp;amp; p_filter-&amp;gt;fmt_in.audio.i_original_channels
               == p_filter-&amp;gt;fmt_out.audio.i_original_channels)
          || p_filter-&amp;gt;fmt_in.audio.i_format != p_filter-&amp;gt;fmt_out.audio.i_format
          || p_filter-&amp;gt;fmt_in.audio.i_rate != p_filter-&amp;gt;fmt_out.audio.i_rate
          || (p_filter-&amp;gt;fmt_in.audio.i_format != VLC_CODEC_FL32
               &amp;amp;&amp;amp; p_filter-&amp;gt;fmt_in.audio.i_format != VLC_CODEC_FI32) )
    {
        return VLC_EGENERIC;
    }

    p_filter-&amp;gt;pf_audio_filter = DoWork;
    return VLC_SUCCESS;
}
&lt;/pre&gt;


&lt;p&gt;The initialization function is used to set some configuration options, initialize memory structures, etc. Look at other modules to see how you can store variables, and how to create preferences variables.&lt;/p&gt;


&lt;p&gt;Here, we verify that the number of channels, the format and the bitrate in the input and output are the same, and that the audio isn't stored in float numbers. If it's ok, we give to libvlc a pointer to the &lt;em&gt;DoWork&lt;/em&gt; function, which will be called when audio data is available.&lt;/p&gt;


&lt;h5&gt;DoWork function&lt;/h5&gt;
&lt;pre&gt;
static block_t *DoWork( filter_t * p_filter, block_t * p_in_buf )
{
    int i_input_nb = aout_FormatNbChannels( &amp;amp;p_filter-&amp;gt;fmt_in.audio );
    int i_output_nb = aout_FormatNbChannels( &amp;amp;p_filter-&amp;gt;fmt_out.audio );

    block_t *p_out_buf;
    if( i_input_nb &amp;gt;= i_output_nb )
    {
        p_out_buf = p_in_buf; /* mix in place */
        p_out_buf-&amp;gt;i_buffer = p_in_buf-&amp;gt;i_buffer / i_input_nb * i_output_nb;
    }
    else
    {
        p_out_buf = filter_NewAudioBuffer( p_filter,
                              p_in_buf-&amp;gt;i_buffer / i_input_nb * i_output_nb );
        if( !p_out_buf )
            goto out;
        p_out_buf-&amp;gt;i_nb_samples = p_in_buf-&amp;gt;i_nb_samples;
    }

    int32_t * p_dest = (int32_t *)p_out_buf-&amp;gt;p_buffer;
    const int32_t * p_src = (int32_t *)p_in_buf-&amp;gt;p_buffer;


    /* Reverse-stereo mode */
    int i;
    for ( i = p_in_buf-&amp;gt;i_nb_samples; i--; )
    {
        *p_dest = p_src[1];
        p_dest++;
        *p_dest = p_src[0];
        p_dest++;
        p_src += 2;
    }

out:
    if( p_in_buf != p_out_buf )
        block_Release( p_in_buf );
    return p_out_buf;
}
&lt;/pre&gt;


&lt;p&gt;The DoWork function manages the buffers and copy them from the input to the output.&lt;/p&gt;


&lt;h4&gt;Now in the oven&lt;/h4&gt;

&lt;p&gt;(No preheat please)&lt;/p&gt;


&lt;p&gt;Here is the content of my Makefile:&lt;/p&gt;
&lt;pre&gt;
all:
	gcc -I/home/Geal/module/include -L/home/Geal/module/ -lvlccore -shared -std=gnu99 \
	-DWIN32 -D__PLUGIN__ -DMODULE_STRING=\&amp;quot;channel_inverser\&amp;quot; module.c -o libchannel_inverser_plugin.dll
/// 

Adapt it to the name of your plugin, and to the path you use, or copy the one from the wiki. My Makefile only contains what is strictly necessary to build your plugin. Now:

&lt;/pre&gt;

&lt;p&gt;Geal@chezmoi ~/module
$ make
///&lt;/p&gt;


&lt;h4&gt;Eat it while it's still hot&lt;/h4&gt;

&lt;p&gt;Now, you just need to copy your dll in the plugins directory of VLC media player, and try your plugin! I don't guarantee that it will work (more like I know that it doesn't work and I'm too lazy to fix it because I won't commit it), I just gave you the structure and the Makefile you need to be up and running. Note that you can use the following command line options to help in your development:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;-vvv&lt;/em&gt;: displays a LOT of debug messages&lt;/li&gt;
&lt;li&gt;&lt;em&gt;--verbose-objects&lt;/em&gt;: helps you filter the messages (example: &lt;em&gt;./vlc -vvv --verbose-objects=-all,+direct3d&lt;/em&gt; to display only the messages related to the direct3d module)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don't forget to send a patch to VideoLAN (subscribe to the vlc-devel mailing-list and attach it to a message). To integrate your module, please read the &lt;a href=&quot;http://git.videolan.org/?p=vlc.git;a=blob;f=HACKING;h=027000315d52f0042b7d7dd82ba4a6729278da7b;hb=HEAD&quot; hreflang=&quot;en&quot;&gt;HACKING&lt;/a&gt; file at the root of the VLC source tree.&lt;/p&gt;


&lt;p&gt;Now, show me your code!&lt;/p&gt;    &lt;p&gt;Copyright © 2007-2009 &lt;a href=&quot;http://eleves.ec-lille.fr/~couprieg&quot;&gt;Geoffroy Couprie&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://eleves.ec-lille.fr/~couprieg/post/So-you-want-to-contribute#comment-form</comments>
      <wfw:comment>http://eleves.ec-lille.fr/~couprieg/post/So-you-want-to-contribute#comment-form</wfw:comment>
      <wfw:commentRss>http://eleves.ec-lille.fr/~couprieg/feed/atom/comments/78</wfw:commentRss>
      </item>
    
  <item>
    <title>VLC tricks: get comfortable</title>
    <link>http://eleves.ec-lille.fr/~couprieg/post/VLC-tricks%3A-get-comfortable</link>
    <guid isPermaLink="false">urn:md5:a3323804f9a658f84894203e74c4950e</guid>
    <pubDate>Sat, 12 Sep 2009 21:02:00 +0100</pubDate>
    <dc:creator>Geoffroy Couprie</dc:creator>
        <category>VideoLAN</category>
        <category>VLC media player</category>    
    <description>    &lt;p&gt;&lt;a href=&quot;http://eleves.ec-lille.fr/~couprieg/post/VLC-tricks%3A-customize-your-interface&quot;&gt;Last time&lt;/a&gt;, I showed you how to customize your interface with new skins. I hope you are happy with it :)&lt;/p&gt;


&lt;p&gt;Now, I will tell you how to tune VLC to meet your needs. I like it when it just runs, with no tweaking. But what I would like even more is customizing the way it runs once and for all, and forget about it.&lt;/p&gt;


&lt;p&gt;So, here is a compilation of VLC settings you may find useful, and info on where you can find them in the preferences:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Always on top:  in &lt;em&gt;Video&lt;/em&gt;. If, like me, you often watch a video while coding/reading/chatting, having a small video window on top of the others in a corner of the screen is convenient.&lt;/li&gt;
&lt;li&gt;Deinterlacing: in &lt;em&gt;Video-&amp;gt;Filters-&amp;gt;Deinterlace&lt;/em&gt;. I have some DVDs with interlaced videos, and it's annoying to set deinterlacing for each video. Here, choose the deinterlacing algorithm you prefer (test with multiple videos).&lt;/li&gt;
&lt;li&gt;Sharpening: in &lt;em&gt;Video-&amp;gt;Filters-&amp;gt;Sharpen video&lt;/em&gt;. Here again, set as you see fit (videos will appear a bit more clear).&lt;/li&gt;
&lt;li&gt;Subtitles: in &lt;em&gt;Video-&amp;gt;Subtitles/OSD&lt;/em&gt;. You can choose the folder where VLC will search for subtitles, and choose the color and font in &lt;em&gt;Video-&amp;gt;Subtitles/OSD-&amp;gt;Text renderer&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Interface tweaks: in &lt;em&gt;Interface-&amp;gt;Main interfaces-&amp;gt;Qt&lt;/em&gt;. Use &lt;em&gt;Automatically save the volume on exit&lt;/em&gt;. you can uncheck &lt;em&gt;Show notification popup on track change&lt;/em&gt; if the systray popup bothers you.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Last but not least, the hotkeys: you can control VLC directly from your keyboard. You can see them and change them in &lt;em&gt;Hotkeys&lt;/em&gt; in the preferences (not that hard to find...). Here are the handy ones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Play/Pause: space&lt;/li&gt;
&lt;li&gt;Fullscreen: F&lt;/li&gt;
&lt;li&gt;Leave fullscreen: Esc&lt;/li&gt;
&lt;li&gt;Next: N&lt;/li&gt;
&lt;li&gt;Previous: P&lt;/li&gt;
&lt;li&gt;Mute: M&lt;/li&gt;
&lt;li&gt;Increase subtitle delay: H&lt;/li&gt;
&lt;li&gt;Decrease subtitle delay: G&lt;/li&gt;
&lt;li&gt;Increase audio delay: K&lt;/li&gt;
&lt;li&gt;Decrease audio delay: J&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There's a lot of configuration settings, so feel free to test the remaining ones and tweak your VLC :)&lt;/p&gt;    &lt;p&gt;Copyright © 2007-2009 &lt;a href=&quot;http://eleves.ec-lille.fr/~couprieg&quot;&gt;Geoffroy Couprie&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://eleves.ec-lille.fr/~couprieg/post/VLC-tricks%3A-get-comfortable#comment-form</comments>
      <wfw:comment>http://eleves.ec-lille.fr/~couprieg/post/VLC-tricks%3A-get-comfortable#comment-form</wfw:comment>
      <wfw:commentRss>http://eleves.ec-lille.fr/~couprieg/feed/atom/comments/67</wfw:commentRss>
      </item>
    
  <item>
    <title>VLC tricks: customize your interface</title>
    <link>http://eleves.ec-lille.fr/~couprieg/post/VLC-tricks%3A-customize-your-interface</link>
    <guid isPermaLink="false">urn:md5:f73b80e4468be20cc576d652c8384e88</guid>
    <pubDate>Thu, 20 Aug 2009 22:20:00 +0100</pubDate>
    <dc:creator>Geoffroy Couprie</dc:creator>
        <category>VideoLAN</category>
            
    <description>    &lt;p&gt;VLC media player is full of nice features, but the interface is a bit &quot;geeky&quot;. It's minimalistic, grey... but you can change it!&lt;/p&gt;


&lt;h3&gt;Customizing Qt4&lt;/h3&gt;


&lt;h4&gt;Default profiles&lt;/h4&gt;


&lt;p&gt;In the Qt4 interface, there are a few different looks you can choose. Go to &lt;em&gt;Tools-&amp;gt;Preferences-&amp;gt;Interface Type-&amp;gt;Native-&amp;gt;Display mode&lt;/em&gt; and then select one of the following profiles:
&lt;img src=&quot;http://eleves.ec-lille.fr/~couprieg/images/.basic_s.jpg&quot; alt=&quot;basic VLC interface&quot; style=&quot;display:block; margin:0 auto;&quot; title=&quot;Basic interface&quot; /&gt;&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://eleves.ec-lille.fr/~couprieg/images/.complet_s.jpg&quot; alt=&quot;Full VLC interface&quot; style=&quot;display:block; margin:0 auto;&quot; title=&quot;Full interface&quot; /&gt;&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://eleves.ec-lille.fr/~couprieg/images/.minimal_s.jpg&quot; alt=&quot;Minimal VLC interface&quot; style=&quot;display:block; margin:0 auto;&quot; title=&quot;Minimal interface&quot; /&gt;&lt;/p&gt;


&lt;h4&gt;Make your own profiles&lt;/h4&gt;

&lt;p&gt;OK, that's not enough. You want more? Then go to &lt;em&gt;View-&amp;gt;Customize Interface...&lt;/em&gt; and you'll see the Qt customization interface:
&lt;img src=&quot;http://eleves.ec-lille.fr/~couprieg/images/.new_perso_m.jpg&quot; alt=&quot;My interface personalization&quot; style=&quot;display:block; margin:0 auto;&quot; title=&quot;My interface personalization&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Go to &lt;em&gt;Select profile&lt;/em&gt;, name it like you want, and then choose what buttons will go in your interface. Here, I have removed some buttons from the &quot;advanced controls&quot; line, and added the frame-per-frame and snapshots buttons to the fullscreen controller.&lt;/p&gt;


&lt;p&gt;That's neat, but it's still that grey interface... Now take a look at the skins interface.&lt;/p&gt;


&lt;h3&gt;Skins&lt;/h3&gt;

&lt;p&gt;Go to &lt;em&gt;Tools-&amp;gt;Preferences-&amp;gt;Interface Type-&amp;gt;Skins&lt;/em&gt; and you'll have a new look for VLC! This theme you see is named &quot;SubX&quot;, and was selected in a contest 2 months ago.&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://eleves.ec-lille.fr/~couprieg/images/.default_skin_m.jpg&quot; alt=&quot;SubX VLC skin&quot; style=&quot;display:block; margin:0 auto;&quot; title=&quot;SubX VLC skin&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Do you like it? If not, you can use another skin. Download it from &lt;a href=&quot;http://www.videolan.org/vlc/skins.php&quot; hreflang=&quot;en&quot;&gt;videolan.org&lt;/a&gt; and save it in c:\Users\yourlogin\AppData\Roaming\vlc\skins then go to ''View-&amp;gt;Themes&quot; and choose it. As an example, here is the Winamp theme:
&lt;img src=&quot;http://eleves.ec-lille.fr/~couprieg/images/.winamp_s.jpg&quot; alt=&quot;VLC Winamp skin&quot; style=&quot;display:block; margin:0 auto;&quot; title=&quot;VLC Winamp skin&quot; /&gt;&lt;/p&gt;


&lt;p&gt;There are a lot of skins to download and try! But if you're not pleased yet, you can create your own with the &lt;a href=&quot;http://www.videolan.org/vlc/skineditor.html&quot; hreflang=&quot;en&quot;&gt;VLC skin editor&lt;/a&gt;:
&lt;img src=&quot;http://eleves.ec-lille.fr/~couprieg/images/.skin_editor_m.jpg&quot; alt=&quot;VLC Skin editor&quot; style=&quot;display:block; margin:0 auto;&quot; title=&quot;VLC Skin editor&quot; /&gt;&lt;/p&gt;


&lt;p&gt;If you create a nice theme, feel free to send it to VideoLAN, we will add it to the list of downloadable skins :)&lt;/p&gt;    &lt;p&gt;Copyright © 2007-2009 &lt;a href=&quot;http://eleves.ec-lille.fr/~couprieg&quot;&gt;Geoffroy Couprie&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://eleves.ec-lille.fr/~couprieg/post/VLC-tricks%3A-customize-your-interface#comment-form</comments>
      <wfw:comment>http://eleves.ec-lille.fr/~couprieg/post/VLC-tricks%3A-customize-your-interface#comment-form</wfw:comment>
      <wfw:commentRss>http://eleves.ec-lille.fr/~couprieg/feed/atom/comments/64</wfw:commentRss>
      </item>
    
  <item>
    <title>DxVA in VLC!</title>
    <link>http://eleves.ec-lille.fr/~couprieg/post/dxva-in-vlc</link>
    <guid isPermaLink="false">urn:md5:d2319a0920bb7b36cced308e01b7bc4c</guid>
    <pubDate>Mon, 04 May 2009 01:24:00 +0000</pubDate>
    <dc:creator>Geoffroy Couprie</dc:creator>
        <category>VideoLAN</category>
            
    <description>    &lt;p&gt;I'm doing again a Google Summer of Code, and this time, I'll work on DxVA integration in VLC: decoding MPEG2 or H264 with the graphic card! This plugin will reduce the load on the CPU and speed up decoding. It looks like I'll have to see lots of HD videos this summer, &quot;for testing purpose&quot; 0:-)&lt;/p&gt;    &lt;p&gt;Copyright © 2007-2009 &lt;a href=&quot;http://eleves.ec-lille.fr/~couprieg&quot;&gt;Geoffroy Couprie&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://eleves.ec-lille.fr/~couprieg/post/dxva-in-vlc#comment-form</comments>
      <wfw:comment>http://eleves.ec-lille.fr/~couprieg/post/dxva-in-vlc#comment-form</wfw:comment>
      <wfw:commentRss>http://eleves.ec-lille.fr/~couprieg/feed/atom/comments/52</wfw:commentRss>
      </item>
    
  <item>
    <title>VLC tricks: Lua playlist</title>
    <link>http://eleves.ec-lille.fr/~couprieg/post/2009/04/11/55-vlc-tricks-lua-playlist</link>
    <guid isPermaLink="false">urn:md5:1eec0070b59139a7c4cf4a313a6dd217</guid>
    <pubDate>Sat, 11 Apr 2009 19:33:00 +0000</pubDate>
    <dc:creator>Geoffroy Couprie</dc:creator>
        <category>VideoLAN</category>
            
    <description>    &lt;h3&gt;Try it!&lt;/h3&gt;
&lt;p&gt;You certainly know that VLC media player can play your videos and musics if you make it open your file. But what happens when you try to open a Google Video or Youtube webpage? If you don't know, try it! Cool, huh? And now, I'll show you how to do it for other video websites, using the Lua interpreter embedded in VLC.&lt;/p&gt;
&lt;p&gt;In your VLC installation directory, you will find the subdirectory lua/playlist. In this directory, you will find the Lua scripts responsible for finding the video content in the website page.&lt;/p&gt;
&lt;h3&gt;Create the Script&lt;/h3&gt;
&lt;p&gt;I chose &lt;a href=&quot;http://www.koreus.com&quot;&gt;Koreus&lt;/a&gt; to do my script, because there's a great deal of funny and weird videos, like &lt;a href=&quot;http://www.koreus.com/video/tortue-pigeon.html&quot;&gt;this one&lt;/a&gt; :p&lt;/p&gt;
&lt;p&gt;First, create koreus.lua in this directory. Your file must contain two functions: probe and parse.&lt;/p&gt;
&lt;h4&gt;The probe function&lt;/h4&gt;
&lt;p&gt;Probe tests if the website is the good one and if it's the URL of a video. Here is the small code I wrote, for an URL like http://www.koreus.com/video/pouet.html :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;-- Probe function.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;function probe()&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;    if vlc.access ~= &quot;http&quot; then&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;        return false&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;    end&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;    koreus_site = string.match( vlc.path, &quot;koreus&quot; )&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;    if not koreus_site then&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;        return false&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;    end&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;    return (  string.match( vlc.path, &quot;video&quot; )  )&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;end&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;That's really simple: just a test, to know if it's HTTP, on a koreus website, containing video in the url, you return true if you found what you want.&lt;/p&gt;
&lt;h4&gt;The parse function&lt;/h4&gt;
&lt;p&gt;Parse looks into the HTML code, finds the metadata and the video url, and send it to VLC media player. That's a bit more code, but nothing really hard.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;-- Parse function.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;function parse()&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;	while true do&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;		line = vlc.readline()&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;		if not line then break end&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;		if string.match( line, &quot;&amp;lt;meta name=\&quot;title\&quot;&quot; ) then&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;			_,_,name = string.find( line, &quot;content=\&quot;(.-)\&quot;&quot; )&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;		end&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;		if string.match( line, &quot;&amp;lt;meta name=\&quot;description\&quot;&quot; ) then&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;			_,_,description = string.find( line, &quot;content=\&quot;(.-)\&quot;&quot; )&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;		end&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;		if string.match( line, &quot;&amp;lt;meta name=\&quot;author\&quot;&quot; ) then&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;			_,_,artist = string.find( line, &quot;content=\&quot;(.-)\&quot;&quot; )&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;		end&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;		if string.match( line, &quot;link rel=\&quot;image_src\&quot;&quot; ) then&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;			_,_,arturl = string.find( line, &quot;href=\&quot;(.-)\&quot;&quot; )&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;		end&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;		if string.match( line, &quot;videoDiv\&quot;%)%.innerHTML&quot; ) then&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;			vid_url = string.match( line, '(http://media%d?%.koreus%.com/%d+/%d+/[%w-]*%.mp4)' )&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;			if vid_url then&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;				return { { path = vid_url; name = name; description = description; artist = artist; arturl = arturl } }&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;			end&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;		end&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;	end&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;end&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Yep, if you look into the source of a koreus webpage, you see that they send an mp4 file to their flash player. You can also get the flv and play it in VLC, but I prefer mp4. About the small regexp: we loo, for a string like &quot;http://media9.koreus.com/00067/200903/tortue-pigeon.mp4&quot;, with media{number}.koreus.com or media.koreus.com. That's easy, isn't it?&lt;/p&gt;
&lt;p&gt;You can download the whole file &lt;a href=&quot;http://eleves.ec-lille.fr/%7Ecouprieg/divers/koreus.lua&quot;&gt;here&lt;/a&gt;. Enjoy!&lt;/p&gt;
&lt;h4&gt;See also&lt;/h4&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://eleves.ec-lille.fr/%7Ecouprieg/post/Flickr-diaporama-in-VLC&quot;&gt;Utterly useless uses of VLC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://eleves.ec-lille.fr/%7Ecouprieg/post/VLC-tricks%3A-customize-your-interface&quot;&gt;VLC tricks: customize your interface&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;    &lt;p&gt;Copyright © 2007-2009 &lt;a href=&quot;http://eleves.ec-lille.fr/~couprieg&quot;&gt;Geoffroy Couprie&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://eleves.ec-lille.fr/~couprieg/post/2009/04/11/55-vlc-tricks-lua-playlist#comment-form</comments>
      <wfw:comment>http://eleves.ec-lille.fr/~couprieg/post/2009/04/11/55-vlc-tricks-lua-playlist#comment-form</wfw:comment>
      <wfw:commentRss>http://eleves.ec-lille.fr/~couprieg/feed/atom/comments/51</wfw:commentRss>
      </item>
    
  <item>
    <title>VideoLAN in the Google Summer of Code 2009</title>
    <link>http://eleves.ec-lille.fr/~couprieg/post/2009/03/19/53-videolan-in-the-google-summer-of-code-2009</link>
    <guid isPermaLink="false">urn:md5:f4f5b40230258d1cbbeec44d21b0ea74</guid>
    <pubDate>Thu, 19 Mar 2009 22:29:33 +0000</pubDate>
    <dc:creator>Geoffroy Couprie</dc:creator>
        <category>VideoLAN</category>
            
    <description>    &lt;p&gt;VideoLAN was accepted for the Google Summer of Code 2009! All the would-be students are encouraged to come in #videolan on freenode and say hello!&lt;/p&gt;


&lt;p&gt;There is a bunch of ideas for this year that I would like to see done:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lua audio filters: that's something I will steal from the project ideas if no student wants to do it! With this, you would be able to create audio filters for VLC with a Lua script. No need to build the whole program, and you could share your fiters with the world. High level of coolness!&lt;/li&gt;
&lt;li&gt;Media Library:  that's definitely an useful feature (just look at WMP or Amarok and you'll be convinced). Some work has already been done on this project by ECP students, and I want to see it in VLC soon!&lt;/li&gt;
&lt;li&gt;Qt embedded interface: I worked for a bit of time on the Windows CE port, especially on the interface, and I've got to say that this interface sucks bears. That's some old code that nobody dared to touch until I came for last GSoC. A Qt embedded interface would be better-looking, and would be portable on Maemo, Nokia, or even an hypothetical Symbian port (does someone want to do the Symbian port? Come on, it'll be fun!).&lt;/li&gt;
&lt;li&gt;GPU-based decoding: this project has a very high degree of coolness! Imagine, being able to decode videos on your graphic card... There are APIs for that on Linux, but I don't know well about these. What I know is that DXVA and Media Foundation let you do it on Windows, and nearly easily (WARNING, I don't say that this project is easy. In fact, you may have big problems with your development environment, as MinGW still doesn't include the DXVA API). I've begun working on this on my bred time, so if no student wants to so it, you will still see it in VLC in a not-so-far future.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don't forget that original ideas will be rewarded so, don't be afraid to propose something else. Last year, I came willing to implement MPEG4 BIFS (if someone wants to do it this year... watch out, it may be a hard project!).&lt;/p&gt;


&lt;p&gt;Another thing: we won't accept students that didn't even say hello. And to be accepted, you also need to prove that you understand the VLC code and that you're able to build it, by sending a patch (fixing a bug, implementing a nice feature).&lt;/p&gt;


&lt;p&gt;For more information, you can look at our &lt;a href=&quot;http://wiki.videolan.org/SoC_2009&quot;&gt;GSoC 2009 project ideas&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;Copyright © 2007-2009 &lt;a href=&quot;http://eleves.ec-lille.fr/~couprieg&quot;&gt;Geoffroy Couprie&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://eleves.ec-lille.fr/~couprieg/post/2009/03/19/53-videolan-in-the-google-summer-of-code-2009#comment-form</comments>
      <wfw:comment>http://eleves.ec-lille.fr/~couprieg/post/2009/03/19/53-videolan-in-the-google-summer-of-code-2009#comment-form</wfw:comment>
      <wfw:commentRss>http://eleves.ec-lille.fr/~couprieg/feed/atom/comments/49</wfw:commentRss>
      </item>
    
  <item>
    <title>VLC on Windows CE - End of Google Summer of Code 2008</title>
    <link>http://eleves.ec-lille.fr/~couprieg/post/2008/09/10/46-end-of-gsoc-2008</link>
    <guid isPermaLink="false">urn:md5:5b04f87c9e22c97636f12ab3306aafbf</guid>
    <pubDate>Wed, 10 Sep 2008 14:47:55 +0000</pubDate>
    <dc:creator>Geoffroy Couprie</dc:creator>
        <category>VideoLAN</category>
            
    <description>    &lt;p&gt;That's the end of the Summer of Code! My patches are not all applied yet to the main tree, but I'm still working on it. I just got write access to the main repository of VLC, so I'm now a real VLC developer! Yay!&lt;/p&gt;


&lt;p&gt;My projects for now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;finishing the port on Windows CE&lt;/li&gt;
&lt;li&gt;working on the Windows version&lt;/li&gt;
&lt;li&gt;going back to school for my second year :P&lt;/li&gt;
&lt;li&gt;finding a 6 months internship in Lille, France, from now to March 2009&lt;/li&gt;
&lt;li&gt;finding a 6 months internship abroad, from March 2009 to September 2009&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(if someone read this and is interested in employing me, feel free to contact me :P)&lt;/p&gt;


&lt;p&gt;That was a nice summer, I really enjoyed working on VLC, and it's a great experience for the future!&lt;/p&gt;


&lt;p&gt;Many thanks to the VideoLAN and the Google teams!&lt;/p&gt;    &lt;p&gt;Copyright © 2007-2009 &lt;a href=&quot;http://eleves.ec-lille.fr/~couprieg&quot;&gt;Geoffroy Couprie&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://eleves.ec-lille.fr/~couprieg/post/2008/09/10/46-end-of-gsoc-2008#comment-form</comments>
      <wfw:comment>http://eleves.ec-lille.fr/~couprieg/post/2008/09/10/46-end-of-gsoc-2008#comment-form</wfw:comment>
      <wfw:commentRss>http://eleves.ec-lille.fr/~couprieg/feed/atom/comments/42</wfw:commentRss>
      </item>
    
  <item>
    <title>Screenshots of VLC on my phone</title>
    <link>http://eleves.ec-lille.fr/~couprieg/post/2008/08/08/44-screenshots-of-vlc-on-my-phone</link>
    <guid isPermaLink="false">urn:md5:cfaf0166a8f251fcf343f85501dea8d5</guid>
    <pubDate>Fri, 08 Aug 2008 01:04:21 +0000</pubDate>
    <dc:creator>Geoffroy Couprie</dc:creator>
        <category>VideoLAN</category>
            
    <description>    &lt;p&gt;Have a look at the old and ugly (yet working) interface of VLC :) There will be a nicer one when I have the other problems fixed.&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://eleves.ec-lille.fr/~couprieg/images/main.jpg&quot; alt=&quot;main interface&quot; /&gt;&lt;/p&gt;


&lt;p&gt;This is the main window. I think this part is fine. I may redraw the buttons and simplify the menus, but it's already easy to use. The angry users of Windows Mobile may thank me for adding a menu entry that really kills VLC (damn you, upper right cross!)&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://eleves.ec-lille.fr/~couprieg/images/playlist.jpg&quot; alt=&quot;playlist&quot; /&gt;&lt;/p&gt;


&lt;p&gt;This is the playlist interface. That's ugly and unintuitive, there are buttons we can't understand ( the bubble means &quot;shuffle&quot;, any idea for a more expressive drawing&amp;nbsp;? ). Clearly, I will have some work to do here. But not now! I'm too busy porting codecs :P Oh, and since my last post, I got it to work a bit ( aka &quot;it doesn't segfault after 10 seconds of use&quot;).&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://eleves.ec-lille.fr/~couprieg/images/prefs.jpg &quot; alt=&quot; preferences &quot; /&gt;&lt;/p&gt;


&lt;p&gt;The preferences are simple: you choose something in the tree in the bottom, and the infos are displayed above.&lt;/p&gt;


&lt;p&gt;Another update since the last post: the video works. I tried the GDI output module, and there's no problem. There's a GAPI module, but it's not working yet. About the codecs and other libraries, I think I'll have these ones ready by the end of GSoC&amp;nbsp;: FFMPEG(not really working yet), Ogg (ported), Vorbis, x264, MP3, libmpeg2 (ported, with a little hack). That will be enough to read many media for now, but don't worry, the rest of the codecs is coming too!&lt;/p&gt;    &lt;p&gt;Copyright © 2007-2009 &lt;a href=&quot;http://eleves.ec-lille.fr/~couprieg&quot;&gt;Geoffroy Couprie&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Windows CE port of VLC: update</title>
    <link>http://eleves.ec-lille.fr/~couprieg/post/2008/08/01/42-windows-ce-port-of-vlc-update</link>
    <guid isPermaLink="false">urn:md5:4588d0bf4cb7e07884624923139cac43</guid>
    <pubDate>Fri, 01 Aug 2008 11:30:00 +0000</pubDate>
    <dc:creator>Geoffroy Couprie</dc:creator>
        <category>VideoLAN</category>
            
    <description>    &lt;p&gt;My last post was a long ago, I have been a bit busy coding since then. So that's where I am:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The LibVLC really works, it should be possible to start using it in WinCE programs&lt;/li&gt;
&lt;li&gt;The file input has been reworked (again)&lt;/li&gt;
&lt;li&gt;The audio output works, but seems to slow, I have timing issues when I want to listen to music&lt;/li&gt;
&lt;li&gt;The video output has been ported but not tested&lt;/li&gt;
&lt;li&gt;Nearly all modules compile fine&lt;/li&gt;
&lt;li&gt;I worked on the port of some codecs&lt;/li&gt;
&lt;li&gt;The interface rebuilding is in progress: the preferences are now working, but not the playlist. The rest is working fine&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There's still some work to do :)&lt;/p&gt;


&lt;p&gt;Now, I need to make it read properly audio and video, have a good interface, prepare the compilation process (automake, etc.) and do some docs!&lt;/p&gt;    &lt;p&gt;Copyright © 2007-2009 &lt;a href=&quot;http://eleves.ec-lille.fr/~couprieg&quot;&gt;Geoffroy Couprie&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://eleves.ec-lille.fr/~couprieg/post/2008/08/01/42-windows-ce-port-of-vlc-update#comment-form</comments>
      <wfw:comment>http://eleves.ec-lille.fr/~couprieg/post/2008/08/01/42-windows-ce-port-of-vlc-update#comment-form</wfw:comment>
      <wfw:commentRss>http://eleves.ec-lille.fr/~couprieg/feed/atom/comments/40</wfw:commentRss>
      </item>
    
  <item>
    <title>YAY IT COMPILED!!</title>
    <link>http://eleves.ec-lille.fr/~couprieg/post/2008/06/19/40-yay-it-compiled</link>
    <guid isPermaLink="false">urn:md5:4565082198f28ca2cc4db5e4c2fd4964</guid>
    <pubDate>Thu, 19 Jun 2008 00:03:00 +0000</pubDate>
    <dc:creator>Geoffroy Couprie</dc:creator>
        <category>VideoLAN</category>
            
    <description>    &lt;p&gt;I just got VLC compiled for Windows CE! That's certainly not working, but I'm happy!&lt;/p&gt;    &lt;p&gt;Copyright © 2007-2009 &lt;a href=&quot;http://eleves.ec-lille.fr/~couprieg&quot;&gt;Geoffroy Couprie&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>First issues when porting an application on Windows CE</title>
    <link>http://eleves.ec-lille.fr/~couprieg/post/2008/06/17/39-first-issues-when-porting-an-application-on-windows-ce</link>
    <guid isPermaLink="false">urn:md5:481b97330ee053c3c7d1dba44aa826ba</guid>
    <pubDate>Tue, 17 Jun 2008 15:46:57 +0000</pubDate>
    <dc:creator>Geoffroy Couprie</dc:creator>
        <category>VideoLAN</category>
            
    <description>&lt;p&gt;Windows CE is a wonderful platform, but there are some problems I encountered that are worth mentioning.&lt;/p&gt;    &lt;p&gt;I use mingw32ce from the cegcc project, which means I don't use newlib. All calls in the program go through a mingw dll and are redirected to the system libraries. With this configuration, I have to use functions from Windows CE, and that's sometimes very tricky.&lt;/p&gt;


&lt;h4&gt;Missing functions&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;rewind(file)&lt;/code&gt; can be replaced by &lt;code&gt;fseek(file, 0L, SEEK_SET); clearerr(file);&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;GetVersion is not present, but can be replaced by GetVersionEx both on Windows NT and Windows CE (and even older versions):&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;if (GetVersion() &amp;lt; 0x80000000)&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;replaced by&lt;/p&gt;


&lt;p&gt;&lt;code&gt;OSVERSIONINFO osinf;&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;ZeroMemory(&amp;amp;osinf, sizeof(OSVERSIONINFO));&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;osinf.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;GetVersionEx(&amp;amp;osinf);&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;if(osinf.dwPlatformId == VER_PLATFORM_WIN32_NT || osinf.dwPlatformId == VER_PLATFORM_WIN32_CE)&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;or&lt;/p&gt;


&lt;p&gt;&lt;code&gt;if(osinf.dwPlatformId &amp;gt;1)&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;to keep compatibility with future versions.&lt;/p&gt;


&lt;ul&gt;
&lt;li&gt;_wopen is replaced by _open&lt;/li&gt;
&lt;li&gt;_wunlink is replaced by _unlink&lt;/li&gt;
&lt;li&gt;_wstati64 replaced by _stat&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These three functions are replaced by their ANSI version because their implementation in cegcc uses Unicode. As an example, see &lt;a href=&quot;http://cegcc.svn.sourceforge.net/viewvc/cegcc/trunk/cegcc/src/mingw/mingwex/wince/unlink.c?view=markup&quot; hreflang=&quot;en&quot;&gt;unlink.c in cegcc&lt;/a&gt;. You can easily reimplement the unicode version of these functions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;asprintf and vasprintf are missing, and this is really painful, as they are widely used. Both are implemented in VLC, but there's a trick in vasprintf. Here's the old code:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&lt;/code&gt;
&lt;code&gt;static inline int vasprintf (char **strp, const char *fmt, va_list ap)&lt;/code&gt;
&lt;code&gt; {&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;     int len = vsnprintf (NULL, 0, fmt, ap) + 1;&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;     char *res = (char *)malloc (len);&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;     if (res == NULL)&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;         return -1;&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;     *strp = res;&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;     return vsprintf (res, fmt, ap);&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;}&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;And now I'm crying loudly, because the behaviour of vsnprintf is different on different platforms. In glibc 2.1, vsnprintf returns the size it would have needed to store the string copied. BUT, in glibc 2.0 and in the Win32 API, vsnprintf returns -1 if it couldn't copy. So here's my workaround:&lt;/p&gt;


&lt;p&gt;&lt;code&gt;static inline int vasprintf (char **strp, const char *fmt, va_list ap)&lt;/code&gt;
&lt;code&gt;{&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;    int n, size = 50;&lt;/code&gt;
&lt;code&gt;    char *res, *np;&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;    if ( (res = (char *) malloc (size)) == NULL )&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;        return -1;&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;    while (1) {&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;        n = vsnprintf (res, size, fmt, ap);&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;        /* If that worked, return the string. */&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;        if (n &amp;gt; -1 &amp;amp;&amp;amp; n &amp;lt; size)&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;        {&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;            *strp = res;&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;            return n;&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;        }&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;        /* Else try again with more space. */&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;        size *= 2;  /* twice the old size */&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;        if ( (np = (char *) realloc (res, size)) == NULL )&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;        {&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;            free(res);&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;            return -1;&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;        }&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;        else&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;        {&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;            res = np;&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;        }&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;code&gt;    }&lt;/code&gt;
&lt;code&gt;}&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;Again, it's buggy, so wait for the new version.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;strcoll&lt;/code&gt; can be replaced by &lt;code&gt;wcscmp&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;tmpfile: i replaced&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;if ( (file = tmpfile ()) == NULL )&lt;/code&gt;
by
&lt;code&gt; if(GetTempFileName(strpath,strprefix,0,buf) || ( (file = fopen(buf,&quot;wb+&quot;)) ==NULL ))&lt;/code&gt;&lt;/p&gt;


&lt;h4&gt;Missing headers&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;There's no errno.h for Windows CE. I had to copy the errno.h from cegcc.&lt;/li&gt;
&lt;li&gt;There are not the same signals. I had to copy signal.h from cegcc&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Multithreading&lt;/h4&gt;

&lt;p&gt;I don't have SignalObjectAndWait, and it's painful. I tried the SetEvent solution from &lt;a href=&quot;http://www.cs.wustl.edu/~schmidt/win32-cv-1.html&quot; hreflang=&quot;en&quot;&gt;this website&lt;/a&gt;, but I'm not sure of the consequences, as I'm not a multithreading expert.&lt;/p&gt;


&lt;h4&gt;Unicode&lt;/h4&gt;

&lt;p&gt;Windows CE is full Unicode, I had to replace the ASCII functions by the Unicode ones.&lt;/p&gt;


&lt;p&gt;UPDATES:
30/09/08-: _open and _unlink are internally unicode&lt;/p&gt;


&lt;p&gt;Bugfix: vasprintf implementation - changed if( n &amp;gt; -1) to if( n == -1).&lt;/p&gt;    &lt;p&gt;Copyright © 2007-2009 &lt;a href=&quot;http://eleves.ec-lille.fr/~couprieg&quot;&gt;Geoffroy Couprie&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://eleves.ec-lille.fr/~couprieg/post/2008/06/17/39-first-issues-when-porting-an-application-on-windows-ce#comment-form</comments>
      <wfw:comment>http://eleves.ec-lille.fr/~couprieg/post/2008/06/17/39-first-issues-when-porting-an-application-on-windows-ce#comment-form</wfw:comment>
      <wfw:commentRss>http://eleves.ec-lille.fr/~couprieg/feed/atom/comments/38</wfw:commentRss>
      </item>
    
  <item>
    <title>VLC media player, Windows CE, what's going on?</title>
    <link>http://eleves.ec-lille.fr/~couprieg/post/2008/06/04/38-vlc-media-player-windows-ce-what-s-going-on</link>
    <guid isPermaLink="false">urn:md5:6ed6b5aa704e6c1bc1cacf49637f0a44</guid>
    <pubDate>Wed, 04 Jun 2008 11:57:34 +0000</pubDate>
    <dc:creator>Geoffroy Couprie</dc:creator>
        <category>VideoLAN</category>
            
    <description>    &lt;p&gt;&lt;a href=&quot;http://www.videolan.org/&quot; hreflang=&quot;en&quot;&gt;VLC media player&lt;/a&gt; is a powerful multimedia player, which can play nearly all video and audio formats, can be used as a streaming server and client, ca reencode various formats, etc. It can be used on a large number of OS, but the Windows CE has been broken for a long time, and now, I'm here to fix it!&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://www.microsoft.com/windows/embedded/products/windowsce/default.mspx&quot; hreflang=&quot;en&quot;&gt;Windows CE&lt;/a&gt; is one of Microsoft's OS, and is designed for embedded devices. It is highly configurable, and can be used on many types of hardware. Windows Mobile, the OS for PDAs and Smartphones, is based on Windows CE. This system is a bit different from the other Windows, so I'll have some work this summer!&lt;/p&gt;


&lt;p&gt;The difficulty here is that VLC media player must be used on various plateforms, so I must not break the code for other systems. I also have to recompile for Windows CE all the libraries used. I'll use the &lt;a href=&quot;http://cegcc.sourceforge.net&quot; hreflang=&quot;en&quot;&gt;cegcc development tools&lt;/a&gt;. I have chosen to use the Visual Studio remote tools and gdb combined with the Device simulator. With that, I'll be able to check the behaviour of my port on various virtual machines. And of course, I'll use it on my phone :)&lt;/p&gt;    &lt;p&gt;Copyright © 2007-2009 &lt;a href=&quot;http://eleves.ec-lille.fr/~couprieg&quot;&gt;Geoffroy Couprie&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://eleves.ec-lille.fr/~couprieg/post/2008/06/04/38-vlc-media-player-windows-ce-what-s-going-on#comment-form</comments>
      <wfw:comment>http://eleves.ec-lille.fr/~couprieg/post/2008/06/04/38-vlc-media-player-windows-ce-what-s-going-on#comment-form</wfw:comment>
      <wfw:commentRss>http://eleves.ec-lille.fr/~couprieg/feed/atom/comments/37</wfw:commentRss>
      </item>
    
</channel>
</rss>
