<?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=Munich</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=Munich"/>
	<link rel="alternate" type="text/html" href="https://wiki.videolan.org/Special:Contributions/Munich/"/>
	<updated>2026-11-04T15:53:35Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Talk:Midi&amp;diff=17212</id>
		<title>Talk:Midi</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Talk:Midi&amp;diff=17212"/>
		<updated>2010-10-26T12:04:42Z</updated>

		<summary type="html">&lt;p&gt;Munich: Created page with &amp;#039;Why doesn&amp;#039;t VLC play midi files by default?&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Why doesn&#039;t VLC play midi files by default?&lt;/div&gt;</summary>
		<author><name>Munich</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Documentation:WebPlugin&amp;diff=16438</id>
		<title>Documentation:WebPlugin</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Documentation:WebPlugin&amp;diff=16438"/>
		<updated>2010-07-06T05:53:32Z</updated>

		<summary type="html">&lt;p&gt;Munich: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Building HTML pages for Mozilla/Firefox/Internet Explorer/Safari ==&lt;br /&gt;
&lt;br /&gt;
The following description works for any of the browsers VLC supports. The JavaScript API has been unified between Mozilla/Firefox/IE (ActiveX) and Safari, thus targeting at all of the major OS out there. &lt;br /&gt;
&lt;br /&gt;
This is only valid for {{VLC}} version 0.8.6 and above.&lt;br /&gt;
&lt;br /&gt;
Additionally to viewing video on all pages, you can build custom pages that will use the advanced features of the plugin, using Javascript functions to control playback or extract information from the&lt;br /&gt;
plugin.&lt;br /&gt;
&lt;br /&gt;
== API description ==&lt;br /&gt;
The vlc plugin exports several objects that can be accessed for setting and getting information. When used improperly the API&#039;s will throw an exception that includes a string that explains what happened. For example when asking for vlc.input.length when there is no playlist item playing.&lt;br /&gt;
&lt;br /&gt;
The vlc plugin knows the following objects:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;audio&#039;&#039;&#039;: Access audio properties.&lt;br /&gt;
*&#039;&#039;&#039;input&#039;&#039;&#039;: Access input properties.&lt;br /&gt;
*&#039;&#039;&#039;playlist&#039;&#039;&#039;: Access playlist properties.&lt;br /&gt;
*&#039;&#039;&#039;subtitle&#039;&#039;&#039;: Access subtitle properties.&lt;br /&gt;
*&#039;&#039;&#039;video&#039;&#039;&#039;: Access video properties.&lt;br /&gt;
*&#039;&#039;&#039;video.marquee&#039;&#039;&#039;: Access marquee video filter properties.&lt;br /&gt;
*&#039;&#039;&#039;video.logo&#039;&#039;&#039;: Access logo video filter properties.&lt;br /&gt;
*&#039;&#039;&#039;log&#039;&#039;&#039;: Access log properties.&lt;br /&gt;
*&#039;&#039;&#039;messages&#039;&#039;&#039;: Access to log message properties.&lt;br /&gt;
*&#039;&#039;&#039;iterator&#039;&#039;&#039;: Access to log iterator properties.&lt;br /&gt;
&lt;br /&gt;
The following JavaScript code shows howto get a reference to the vlc plugin. This reference can then be used to access the objects of the vlc plugin.&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;html&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;title&amp;amp;gt;VLC Mozilla plugin test page&amp;amp;lt;/title&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;body&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;embed type=&amp;quot;application/x-vlc-plugin&amp;quot; pluginspage=&amp;quot;http://www.videolan.org&amp;quot; version=&amp;quot;VideoLAN.VLCPlugin.2&amp;quot;&lt;br /&gt;
     width=&amp;quot;640&amp;quot;&lt;br /&gt;
     height=&amp;quot;480&amp;quot;&lt;br /&gt;
     id=&amp;quot;vlc&amp;quot;&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;/embed&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;script language=&amp;quot;Javascript&amp;quot;&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;!--&lt;br /&gt;
 var vlc = document.getElementById(&amp;quot;vlc&amp;quot;);&lt;br /&gt;
 vlc.audio.toggleMute();&lt;br /&gt;
 !--&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;/script&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;/body&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;/html&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Root object====&lt;br /&gt;
&lt;br /&gt;
readonly properties&lt;br /&gt;
*&#039;&#039;&#039;VersionInfo&#039;&#039;&#039;: returns version information string&lt;br /&gt;
&lt;br /&gt;
read/write properties&lt;br /&gt;
*&#039;&#039;none&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
methods&lt;br /&gt;
*&#039;&#039;&#039;vlc.versionInfo()&#039;&#039;&#039;: returns version information string (same as VersionInfo)&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;vlc.addEventListener(eventname, callback, bubble)&#039;&#039;&#039;: (only for Mozilla) add a listener for mentioned event name, callback expects a function and bubble influences the order of eventhandling by JS (usually it is set to false).&lt;br /&gt;
*&#039;&#039;&#039;vlc.removeEventListener(eventname, callback, bubble)&#039;&#039;&#039;: (only for Mozilla) remove listener for mentioned event name, callback expects a function and bubble influences the order of eventhandling by JS (usually it is set to false).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;vlc.attachEvent(eventname, callback)&#039;&#039;&#039;: (only for ActiveX) add listener for mentioned event name, callback expects a function&lt;br /&gt;
*&#039;&#039;&#039;vlc.removeEvent(eventname, callback)&#039;&#039;&#039;: (only for ActiveX) remove listener for mentioned event name, callback expects a function&lt;br /&gt;
&lt;br /&gt;
events&lt;br /&gt;
*&#039;&#039;&#039;MediaPlayerNothingSpecial&#039;&#039;&#039;: vlc is in idle state doing nothing but waiting for a command to be issued&lt;br /&gt;
*&#039;&#039;&#039;MediaPlayerOpening&#039;&#039;&#039;: vlc is opening an media resource locator (MRL)&lt;br /&gt;
*&#039;&#039;&#039;MediaPlayerBuffering&#039;&#039;&#039;: vlc is buffering&lt;br /&gt;
*&#039;&#039;&#039;MediaPlayerPlaying&#039;&#039;&#039;: vlc is playing a media&lt;br /&gt;
*&#039;&#039;&#039;MediaPlayerPaused&#039;&#039;&#039;: vlc is in paused state&lt;br /&gt;
*&#039;&#039;&#039;MediaPlayerForward&#039;&#039;&#039;: vlc is fastforwarding through the media (works only when an input supports forward playback)&lt;br /&gt;
*&#039;&#039;&#039;MediaPlayerBackward&#039;&#039;&#039;: vlc is going backwards through the media (works only when an input supports backwards playback)&lt;br /&gt;
*&#039;&#039;&#039;MediaPlayerEncounteredError&#039;&#039;&#039;: vlc has encountered an error and is unable to continue&lt;br /&gt;
*&#039;&#039;&#039;MediaPlayerEndReached&#039;&#039;&#039;: vlc has reached the end of current playlist&lt;br /&gt;
*&#039;&#039;&#039;MediaPlayerTimeChanged&#039;&#039;&#039;: time has changed&lt;br /&gt;
*&#039;&#039;&#039;MediaPlayerPositionChanged&#039;&#039;&#039;: media position has changed&lt;br /&gt;
*&#039;&#039;&#039;MediaPlayerSeekableChanged&#039;&#039;&#039;: media seekable flag has changed (true means media is seekable, false means it is not)&lt;br /&gt;
*&#039;&#039;&#039;MediaPlayerPausableChanged&#039;&#039;&#039;: media pausable flag has changed (true means media is pauseable, false means it is not)&lt;br /&gt;
*&#039;&#039;&#039;MediaPlayerMouseGrab&#039;&#039;&#039;: vlc video filter (eg: logo) detected a object movement in its video window and returns new X and Y coordinates&lt;br /&gt;
&lt;br /&gt;
The following code snippit provides easy functions to register and unregister event callbacks on all supported platforms (currently only Linux mozilla based browsers and windows activeX objects for Internet Explorer).&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;SCRIPT language=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;amp;lt;!--&lt;br /&gt;
 function registerVLCEvent(event, handler)&lt;br /&gt;
 {&lt;br /&gt;
    var vlc = getVLC(&amp;quot;vlc&amp;quot;);&lt;br /&gt;
    if (vlc) {&lt;br /&gt;
        if (vlc.attachEvent) {&lt;br /&gt;
            // Microsoft&lt;br /&gt;
            vlc.attachEvent (event, handler);&lt;br /&gt;
        } else if (vlc.addEventListener) {&lt;br /&gt;
            // Mozilla: DOM level 2&lt;br /&gt;
            vlc.addEventListener (event, handler, false);&lt;br /&gt;
        } else {&lt;br /&gt;
            // DOM level 0&lt;br /&gt;
            vlc[&amp;quot;on&amp;quot; + event] = handler;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 // stop listening to event&lt;br /&gt;
 function unregisterVLCEvent(event, handler)&lt;br /&gt;
 {&lt;br /&gt;
    var vlc = getVLC(&amp;quot;vlc&amp;quot;);&lt;br /&gt;
    if (vlc) {&lt;br /&gt;
        if (vlc.detachEvent) {&lt;br /&gt;
            // Microsoft&lt;br /&gt;
            vlc.detachEvent (event, handler);&lt;br /&gt;
        } else if (vlc.removeEventListener) {&lt;br /&gt;
            // Mozilla: DOM level 2&lt;br /&gt;
            vlc.removeEventListener (event, handler, false);&lt;br /&gt;
        } else {&lt;br /&gt;
            // DOM level 0&lt;br /&gt;
            vlc[&amp;quot;on&amp;quot; + event] = null;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 // event callback function for testing&lt;br /&gt;
 function handleEvents(event)&lt;br /&gt;
 {&lt;br /&gt;
    if (!event)&lt;br /&gt;
        event = window.event; // IE&lt;br /&gt;
    if (event.target) {&lt;br /&gt;
        // Netscape based browser&lt;br /&gt;
        targ = event.target;&lt;br /&gt;
    } else if (event.srcElement) {&lt;br /&gt;
        // ActiveX&lt;br /&gt;
        targ = event.srcElement;&lt;br /&gt;
    } else {&lt;br /&gt;
        // No event object, just the value&lt;br /&gt;
        alert(&amp;quot;Event value&amp;quot; + event );&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    if (targ.nodeType == 3) // defeat Safari bug&lt;br /&gt;
        targ = targ.parentNode;&lt;br /&gt;
    alert(&amp;quot;Event &amp;quot; + event.type + &amp;quot; has fired from &amp;quot; + targ );&lt;br /&gt;
 }&lt;br /&gt;
 // handle mouse grab event from video filter&lt;br /&gt;
 function handleMouseGrab(event,X,Y)&lt;br /&gt;
 {&lt;br /&gt;
    if (!event)&lt;br /&gt;
        event = window.event; // IE&lt;br /&gt;
    alert(&amp;quot;new position (&amp;quot; + X + &amp;quot;,&amp;quot; + Y + &amp;quot;)&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
 // Register a bunch of callbacks.&lt;br /&gt;
 registerVLCEvent(&#039;MediaPlayerNothingSpecial&#039;, handleEvents);&lt;br /&gt;
 registerVLCEvent(&#039;MediaPlayerOpening&#039;, handleEvents);&lt;br /&gt;
 registerVLCEvent(&#039;MediaPlayerBuffering&#039;, handleEvents);&lt;br /&gt;
 registerVLCEvent(&#039;MediaPlayerPlaying&#039;, handleEvents);&lt;br /&gt;
 registerVLCEvent(&#039;MediaPlayerPaused&#039;, handleEvents);&lt;br /&gt;
 registerVLCEvent(&#039;MediaPlayerForward&#039;, handleEvents);&lt;br /&gt;
 registerVLCEvent(&#039;MediaPlayerBackward&#039;, handleEvents);&lt;br /&gt;
 registerVLCEvent(&#039;MediaPlayerEncounteredError&#039;, handleEvents);&lt;br /&gt;
 registerVLCEvent(&#039;MediaPlayerEndReached&#039;, handleEvents);&lt;br /&gt;
 registerVLCEvent(&#039;MediaPlayerTimeChanged&#039;, handleEvents);&lt;br /&gt;
 registerVLCEvent(&#039;MediaPlayerPositionChanged&#039;, handleEvents);&lt;br /&gt;
 registerVLCEvent(&#039;MediaPlayerSeekableChanged&#039;, handleEvents);&lt;br /&gt;
 registerVLCEvent(&#039;MediaPlayerPausableChanged&#039;, handleEvents);&lt;br /&gt;
 registerVLCEvent(&#039;MediaPlayerMouseGrab&#039;, handleMouseGrab);&lt;br /&gt;
 &amp;lt;/script&amp;gt;&lt;br /&gt;
 --&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Audio object====&lt;br /&gt;
&lt;br /&gt;
readonly properties&lt;br /&gt;
*&#039;&#039;&#039;vlc.audio.count&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) returns the number of audio track available.&lt;br /&gt;
&lt;br /&gt;
read/write properties&lt;br /&gt;
*&#039;&#039;&#039;vlc.audio.mute&#039;&#039;&#039;: boolean value to mute and unmute the audio.&lt;br /&gt;
*&#039;&#039;&#039;vlc.audio.volume&#039;&#039;&#039;: a value between [0-200] which indicates a percentage of the volume.&lt;br /&gt;
*&#039;&#039;&#039;vlc.audio.track&#039;&#039;&#039;: (supported in vlc version &amp;gt; 0.8.6) a value between [1-65535] which indicates the audio track to play or that is playing. a value of 0 means the audio is/will be disabled.&lt;br /&gt;
*&#039;&#039;&#039;vlc.audio.channel&#039;&#039;&#039;: (supported in vlc version &amp;gt; 0.8.6) integer value between [1-5] that indicates which audio channel mode is used, values can be: &amp;quot;1=stereo&amp;quot;, &amp;quot;2=reverse stereo&amp;quot;, &amp;quot;3=left&amp;quot;, &amp;quot;4=right&amp;quot;, &amp;quot;5=dolby&amp;quot;. Use vlc.audio.channel to check if setting of the audio channel mode has succeeded.&lt;br /&gt;
&lt;br /&gt;
 Audio Channel:&lt;br /&gt;
 &amp;lt;SELECT readonly onChange=&#039;doAudioChannel(this.value)&#039;&amp;gt;&lt;br /&gt;
    &amp;lt;OPTION value=1&amp;gt;Stereo&amp;lt;/OPTION&amp;gt;&lt;br /&gt;
    &amp;lt;OPTION value=2&amp;gt;Reverse stereo&amp;lt;/OPTION&amp;gt;&lt;br /&gt;
    &amp;lt;OPTION value=3&amp;gt;Left&amp;lt;/OPTION&amp;gt;&lt;br /&gt;
    &amp;lt;OPTION value=4&amp;gt;Right&amp;lt;/OPTION&amp;gt;&lt;br /&gt;
    &amp;lt;OPTION value=5&amp;gt;Dolby&amp;lt;/OPTION&amp;gt;&lt;br /&gt;
 &amp;lt;/SELECT&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;SCRIPT language=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;amp;lt;!--&lt;br /&gt;
 function doAudioChannel(value)&lt;br /&gt;
 {&lt;br /&gt;
    var vlc = getVLC(&amp;quot;vlc&amp;quot;);&lt;br /&gt;
    vlc.audio.channel = parseInt(value);&lt;br /&gt;
    alert(vlc.audio.channel);&lt;br /&gt;
 };&lt;br /&gt;
 --&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
methods&lt;br /&gt;
*&#039;&#039;&#039;vlc.audio.toggleMute()&#039;&#039;&#039;: boolean toggle that mutes and unmutes the audio based upon the previous state.&lt;br /&gt;
*&#039;&#039;&#039;vlc.audio.description(int i)&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) give the i-th audio track name. 0 corresponds to disable and 1 to the first audio track.&lt;br /&gt;
&lt;br /&gt;
====Input object====&lt;br /&gt;
&lt;br /&gt;
readonly properties&lt;br /&gt;
*&#039;&#039;&#039;vlc.input.length&#039;&#039;&#039;: length of the input file in number of milliseconds. 0 is returned for &#039;live&#039; streams or clips whose length cannot be determined by VLC. It returns -1 if no input is playing. &lt;br /&gt;
*&#039;&#039;&#039;vlc.input.fps&#039;&#039;&#039;: frames per second returned as a float (typically 60.0, 50.0, 23.976, etc...)&lt;br /&gt;
*&#039;&#039;&#039;vlc.input.hasVout&#039;&#039;&#039;: a boolean that returns true when the video is being displayed, it returns false when video is not displayed&lt;br /&gt;
&lt;br /&gt;
read/write properties&lt;br /&gt;
*&#039;&#039;&#039;vlc.input.position&#039;&#039;&#039;: normalized position in multimedia stream item given as a float value between [0.0 - 1.0]&lt;br /&gt;
*&#039;&#039;&#039;vlc.input.time&#039;&#039;&#039;: the absolute position in time given in milliseconds, this property can be used to seek through the stream&lt;br /&gt;
 &amp;amp;lt;!-- absolute seek in stream !--&amp;amp;gt;&lt;br /&gt;
 vlc.input.time = &amp;amp;lt;absolute seek&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;!-- relative seek in stream !--&amp;amp;gt;&lt;br /&gt;
 vlc.input.time = vlc.input.time + &amp;amp;lt;relative seek&amp;amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;vlc.input.state&#039;&#039;&#039;: current state of the input chain given as enumeration (IDLE=0, OPENING=1, BUFFERING=2, PLAYING=3, PAUSED=4, STOPPING=5, ENDED=6, ERROR=7). Note: Test for ENDED=6 to catch end of playback. Checking for STOPPING=5 is NOT ENOUGH.&lt;br /&gt;
*&#039;&#039;&#039;vlc.input.rate&#039;&#039;&#039;: input speed given as float (1.0 for normal speed, 0.5 for half speed, 2.0 for twice as fast, etc.).&lt;br /&gt;
 rate &amp;amp;gt; 1              : is fastforward&lt;br /&gt;
 rate &amp;amp;gt; 0 and rate &amp;amp;lt; 1 : is slow motion&lt;br /&gt;
 rate &amp;amp;lt; 0              : is rewind&lt;br /&gt;
&lt;br /&gt;
methods&lt;br /&gt;
*&#039;&#039;none&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Playlist object====&lt;br /&gt;
&lt;br /&gt;
readonly properties&lt;br /&gt;
*&#039;&#039;&#039;vlc.playlist.itemCount&#039;&#039;&#039;: number that returns the amount of items currently in the playlist (&#039;&#039;&#039;deprecated&#039;&#039;&#039;, do not use, see [[#Playlist_items_object| Playlist items]])&lt;br /&gt;
*&#039;&#039;&#039;vlc.playlist.isPlaying&#039;&#039;&#039;: a boolean that returns true if the current playlist item is playing and false when it is not playing&lt;br /&gt;
*&#039;&#039;&#039;vlc.playlist.items&#039;&#039;&#039;: return the playlist items collection, see [[#Playlist_items_object| Playlist items]]&lt;br /&gt;
&lt;br /&gt;
read/write properties&lt;br /&gt;
*&#039;&#039;none&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
methods&lt;br /&gt;
*&#039;&#039;&#039;vlc.playlist.add(mrl)&#039;&#039;&#039;: add a playlist item as [[MRL]]. The MRL must be given as a string. Returns a number as an item identifier in playlist (this is not a position  in playlist).&lt;br /&gt;
*&#039;&#039;&#039;vlc.playlist.add(mrl,name,options)&#039;&#039;&#039;: add a playlist item as MRL, with metaname &#039;name&#039; and options &#039;options&#039;. options are text arguments which can be provided either as a single string containing space separated values, akin to VLC command line, or as an array of string values. Returns a number as an item identifier in playlist (this is not a position in playlist).&lt;br /&gt;
  var options = new Array(&amp;quot;:aspect-ratio=4:3&amp;quot;, &amp;quot;--rtsp-tcp&amp;quot;);&lt;br /&gt;
  var id = vlc.playlist.add(&amp;quot;rtsp://servername/item/to/play&amp;quot;, &amp;quot;fancy name&amp;quot;, options);&lt;br /&gt;
  vlc.playlist.playItem(id);&lt;br /&gt;
*&#039;&#039;&#039;vlc.playlist.play()&#039;&#039;&#039;: start playing the current playlist item&lt;br /&gt;
*&#039;&#039;&#039;vlc.playlist.playItem(number)&#039;&#039;&#039;: start playing the item whose identifier is number&lt;br /&gt;
*&#039;&#039;&#039;vlc.playlist.togglePause()&#039;&#039;&#039;: toggle the pause state for the current playlist item&lt;br /&gt;
*&#039;&#039;&#039;vlc.playlist.stop()&#039;&#039;&#039;: stop playing the current playlist item&lt;br /&gt;
*&#039;&#039;&#039;vlc.playlist.next()&#039;&#039;&#039;: iterate to the next playlist item&lt;br /&gt;
*&#039;&#039;&#039;vlc.playlist.prev()&#039;&#039;&#039;: iterate to the previous playlist item&lt;br /&gt;
*&#039;&#039;&#039;vlc.playlist.clear()&#039;&#039;&#039;: empty the current playlist, all items will be deleted from the playlist (&#039;&#039;&#039;deprecated&#039;&#039;&#039;, do not use, see [[#Playlist_items_object| Playlist items]])&lt;br /&gt;
*&#039;&#039;&#039;vlc.playlist.removeItem(number)&#039;&#039;&#039;: remove the item from playlist whose identifier is number &amp;lt;!-- (note: this number isn&#039;t the position in the playlist, but the number given by vlc.playlist.add() ) --&amp;gt; (&#039;&#039;&#039;deprecated&#039;&#039;&#039;, do not use, see [[#Playlist_items_object| Playlist items]])&lt;br /&gt;
&lt;br /&gt;
====Playlist items object====&lt;br /&gt;
&lt;br /&gt;
readonly properties&lt;br /&gt;
*&#039;&#039;&#039;vlc.playlist.items.count&#039;&#039;&#039;: number of items currently in the playlist&lt;br /&gt;
&lt;br /&gt;
read/write properties&lt;br /&gt;
*&#039;&#039;none&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
methods&lt;br /&gt;
*&#039;&#039;&#039;vlc.playlist.items.clear()&#039;&#039;&#039;: empty the current playlist, all items will be deleted from the playlist. If a movie is playing, it stop. Note that when this method returns, playlist may not have been entirely been cleared as this operation is performed asynchronously; use the &#039;&#039;count&#039;&#039; property to verify/wait until the playlist is empty.&lt;br /&gt;
*&#039;&#039;&#039;vlc.playlist.items.remove(number)&#039;&#039;&#039;: remove the item whose identifier is number from playlist. (note: this number isn&#039;t the position in the playlist, but the number given by vlc.playlist.add() )&lt;br /&gt;
&lt;br /&gt;
====Subtitle object====&lt;br /&gt;
&lt;br /&gt;
readonly properties&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;vlc.subtitle.count&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) returns the number of subtitle available.&lt;br /&gt;
&lt;br /&gt;
read/write properties &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;vlc.subtitle.track&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) get and set the subtitle track to show on the video screen. The property takes an integer as input value [1..65535]. If subtitle track is set to 0, the subtitles will be disabled. If set to a value outside the current subtitle tracks range, then it will return -1 and display an error message.&lt;br /&gt;
&lt;br /&gt;
methods&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;vlc.subtitle.description(int i)&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) give the i-th subtitle name. 0 correspond to disable and 1 to the first subtitle.&lt;br /&gt;
&lt;br /&gt;
====Video object====&lt;br /&gt;
&lt;br /&gt;
readonly properties&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.width&#039;&#039;&#039;: returns the horizontal size of the video&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.height&#039;&#039;&#039;: returns the vertical size of the video&lt;br /&gt;
&lt;br /&gt;
read/write properties&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.fullscreen&#039;&#039;&#039;: when set to true the video will be displayed in fullscreen mode, when set to false the video will be shown inside the video output size. The property takes a boolean as input.&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.aspectRatio&#039;&#039;&#039;: get and set the aspect ratio to use in the video screen. The property takes a string as input value. Typical values are: &amp;quot;1:1&amp;quot;, &amp;quot;4:3&amp;quot;, &amp;quot;16:9&amp;quot;, &amp;quot;16:10&amp;quot;, &amp;quot;221:100&amp;quot; and &amp;quot;5:4&amp;quot;&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.subtitle&#039;&#039;&#039;: (supported in vlc version &amp;gt; 0.8.6a) get and set the subtitle track to show on the video screen. The property takes an integer as input value [1..65535]. If subtitle track is set to 0, the subtitles will be disabled. If set to a value outside the current subtitle tracks range, then it will return -1 and display an error message.&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.teletext&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 0.9.0) get and set teletext page to show on the video stream. This will only work if a teletext elementary stream is available in the video stream. The property takes an integer as input value [0..999] for indicating the teletext page to view, setting the value to 0 means hide teletext. On error it will return -1 and display an error message.&lt;br /&gt;
&lt;br /&gt;
methods&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.toggleFullscreen()&#039;&#039;&#039;: toggle the fullscreen mode based on the previous setting&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.toggleTeletext()&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 0.9.0) toggle the teletext page to overlay transparent or not, based on the previous setting&lt;br /&gt;
&lt;br /&gt;
=====Deinterlace Object=====&lt;br /&gt;
&lt;br /&gt;
readonly properties&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;none&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
read/write properties&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;none&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
methods&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.deinterlace.enable(&amp;quot;my_mode&amp;quot;)&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) enable deinterlacing with my_mode. You can enable it with &amp;quot;blend&amp;quot;, &amp;quot;bob&amp;quot;, &amp;quot;discard&amp;quot;, &amp;quot;linear&amp;quot;, &amp;quot;mean&amp;quot; or &amp;quot;x&amp;quot; mode. Enabling too soon deinterlacing may cause some problems. You have to wait that all variable are available before enabling it.&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.deinterlace.disable()&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) disable deinterlacing.&lt;br /&gt;
&lt;br /&gt;
=====Marquee Object=====&lt;br /&gt;
&lt;br /&gt;
readonly properties&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;none&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
read/write properties&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.marquee.text&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) display my text on the screen.&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.marquee.color&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) change the text color. val is the new color to use (WHITE=0x000000, BLACK=0xFFFFFF, RED=0xFF0000, GREEN=0x00FF00, BLUE=0x0000FF...).&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.marquee.opacity&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) change the text opacity, val is defined from 0 (completely transparent) to 255 (completely opaque).&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.marquee.position&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) change the text position (CENTER=0, LEFT=1, RIGHT=2, TOP=4, TOP-LEFT=5, TOP-RIGHT=6, BOTTOM=8, BOTTOM-LEFT=9, BOTTOM_RIGHT=10).&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.marquee.refresh&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) change the marquee refresh period.&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.marquee.size&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) val define the new size for the text displayed on the screen. If the text is bigger than the screen then the text is not displayed.&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.marquee.timeout&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) change the timeout value. val is defined in ms, but 0 value correspond to unlimited.&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.marquee.x&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) change text abscissa.&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.marquee.y&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) change text ordinate.&lt;br /&gt;
&lt;br /&gt;
methods&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.marquee.enable()&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) enable marquee filter.&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.marquee.disable()&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) disable marquee filter.&lt;br /&gt;
&lt;br /&gt;
Some problems may happen (option like color or text will not be applied) because of the VLC asynchronous functioning. To avoid it, after enabling marquee, you have to wait a little time before changing an option. But it should be fixed by the new vout implementation.&lt;br /&gt;
&lt;br /&gt;
=====Logo Object=====&lt;br /&gt;
&lt;br /&gt;
readonly properties&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;none&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
read/write properties&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.logo.opacity&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) change the picture opacity, val is defined from 0 (completely transparent) to 255 (completely opaque).&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.logo.position&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) change the text position (&amp;quot;center&amp;quot;, &amp;quot;left&amp;quot;, &amp;quot;right&amp;quot;, &amp;quot;top&amp;quot;, &amp;quot;top-left&amp;quot;, &amp;quot;top-right&amp;quot;, &amp;quot;bottom&amp;quot;, &amp;quot;bottom-left&amp;quot;, &amp;quot;bottom-right&amp;quot;).&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.logo.delay&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) display each picture for a duration of 1000 ms (default) before displaying the next  picture.&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.logo.repeat&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) number of loops for picture animation (-1=continuous, 0=disabled, n=n-times). The default is -1 (continuous).&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.logo.x&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) change the x-offset for displaying the picture counting from top-left on the screen.&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.logo.y&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) change the y-offset for displaying the picture counting from top-left on the screen.&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.logo.width&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) change the picture width.&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.logo.height&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) change the picture height.&lt;br /&gt;
&lt;br /&gt;
methods&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.logo.enable()&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) enable logo video filter.&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.logo.disable()&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) disable logo video filter.&lt;br /&gt;
*&#039;&#039;&#039;vlc.video.logo.file(&amp;quot;file.png&amp;quot;)&#039;&#039;&#039;: (supported in vlc version &amp;gt;= 1.1.0) display my file.png as logo on the screen.&lt;br /&gt;
&lt;br /&gt;
Some problems may happen because of the VLC asynchronous functioning. To avoid it, after enabling logo video filter, you have to wait a little time before changing an option. But it should be fixed by the new vout implementation.&lt;br /&gt;
&lt;br /&gt;
====Log object====&lt;br /&gt;
: &#039;&#039;&#039;CAUTION&#039;&#039;&#039;: For security concern, VLC 1.0.0-rc1 is the latest (near-to-stable) version in which this object and its children are supported.&lt;br /&gt;
&lt;br /&gt;
This object allows accessing VLC main message logging queue. Typically this queue capacity is very small (no nore than 256 entries) and can easily overflow, therefore messages should be read and cleared as often as possible.&lt;br /&gt;
&lt;br /&gt;
readonly properties&lt;br /&gt;
*&#039;&#039;&#039;vlc.log.messages&#039;&#039;&#039;: returns the message collection, see [[#Messages object|Messages object]]&lt;br /&gt;
&lt;br /&gt;
read/write properties&lt;br /&gt;
*&#039;&#039;&#039;vlc.log.verbosity&#039;&#039;&#039;: write number [-1,0,1,2,3] for changing the verbosity level of the log messages; messages whose verbosity is higher than set will be not be logged in the queue. The numbers have the following meaning: -1 disable, 0 info, 1 error, 2 warning, 3 debug. &lt;br /&gt;
&lt;br /&gt;
methods&lt;br /&gt;
*&#039;&#039;none&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Messages object====&lt;br /&gt;
: &#039;&#039;&#039;CAUTION&#039;&#039;&#039;: For security concern, VLC 1.0.0-rc1 is the latest (near-to-stable) version in which this object and its children are supported.&lt;br /&gt;
&lt;br /&gt;
readonly properties&lt;br /&gt;
*&#039;&#039;&#039;messages.count&#039;&#039;&#039;: returns number of messages in the log&lt;br /&gt;
&lt;br /&gt;
read/write properties&lt;br /&gt;
*&#039;&#039;none&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
methods&lt;br /&gt;
*&#039;&#039;&#039;messages.clear()&#039;&#039;&#039;: clear the current log buffer. It should be called as frequently as possible to not overflow the message queue. Call this method after the log messages of interest are read.&lt;br /&gt;
*&#039;&#039;&#039;messages.iterator()&#039;&#039;&#039;: creates and returns an iterator object, used to iterate over the messages in the log. &#039;&#039;&#039;Don&#039;t clear the log buffer while holding an iterator object.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Messages Iterator object====&lt;br /&gt;
: &#039;&#039;&#039;CAUTION&#039;&#039;&#039;: For security concern, VLC 1.0.0-rc1 is the latest (near-to-stable) version in which this object and its children are supported.&lt;br /&gt;
&lt;br /&gt;
readonly properties&lt;br /&gt;
*&#039;&#039;&#039;iterator.hasNext&#039;&#039;&#039;: returns a boolean that indicates whether &#039;&#039;vlc.log.messages.next()&#039;&#039; will return the next message.&lt;br /&gt;
&lt;br /&gt;
read/write properties&lt;br /&gt;
*&#039;&#039;none&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
methods&lt;br /&gt;
*&#039;&#039;&#039;iterator.next()&#039;&#039;&#039;: returns the next message object in the log, see [[Message object]]&lt;br /&gt;
&lt;br /&gt;
====Message object====&lt;br /&gt;
: &#039;&#039;&#039;CAUTION&#039;&#039;&#039;: For security concern, VLC 1.0.0-rc1 is the latest (near-to-stable) version in which this object and its children are supported.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;message.severity&#039;&#039;&#039;: number that indicates the severity of the log message (0 = info, 1 = error, 2 = warning, 3 = debug)&lt;br /&gt;
*&#039;&#039;&#039;message.name&#039;&#039;&#039;: name of VLC module that printed the log message (e.g: main, http, directx, etc...)&lt;br /&gt;
*&#039;&#039;&#039;message.type&#039;&#039;&#039;: type of VLC module that printed the log message (eg: input, access, vout, sout, etc...)&lt;br /&gt;
*&#039;&#039;&#039;message.message&#039;&#039;&#039;: the message text&lt;br /&gt;
&lt;br /&gt;
==Build HTML pages that use the plugin (VLC version up to 0.8.5)==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WARNING:&#039;&#039;&#039; the APIs described in this section are &#039;&#039;&#039;deprecated&#039;&#039;&#039;, do not use. They no longer work on recent VLC version (&amp;gt; 0.8.5), either it being the ActiveX (Internet Explorer)/ Safari or Mozilla based browsers.&lt;br /&gt;
&lt;br /&gt;
The following API description is only valid uptill version 0.8.5 of the mozilla plugin.&lt;br /&gt;
&lt;br /&gt;
Additionally to viewing video on all pages, you can build custom pages that will use the advanced features of the plugin, using Javascript functions to control playback or extract information from the&lt;br /&gt;
plugin.&lt;br /&gt;
&lt;br /&gt;
The vlc plugin supports the following function calls:&lt;br /&gt;
*&#039;&#039;&#039;play()&#039;&#039;&#039;: Start playing media in the plugin.&lt;br /&gt;
*&#039;&#039;&#039;pause()&#039;&#039;&#039;: Pause playback.&lt;br /&gt;
*&#039;&#039;&#039;stop()&#039;&#039;&#039;: Stop media playback.&lt;br /&gt;
*&#039;&#039;&#039;fullscreen()&#039;&#039;&#039;: Switch the video to full screen.&lt;br /&gt;
*&#039;&#039;&#039;set_volume(vol)&#039;&#039;&#039;: Set the volume. &#039;&#039;&#039;vol&#039;&#039;&#039; has to be an int in the 0-200 range.&lt;br /&gt;
*&#039;&#039;&#039;get_volume()&#039;&#039;&#039;: Get the current volume setting.&lt;br /&gt;
*&#039;&#039;&#039;mute()&#039;&#039;&#039;: Toggle volume muting.&lt;br /&gt;
*&#039;&#039;&#039;set_int_variable(var_name, value)&#039;&#039;&#039;:&lt;br /&gt;
*&#039;&#039;&#039;set_bool_variable(var_name, value)&#039;&#039;&#039;:&lt;br /&gt;
*&#039;&#039;&#039;set_str_variable(var_name, value)&#039;&#039;&#039;:&lt;br /&gt;
*&#039;&#039;&#039;get_int_variable(var_name)&#039;&#039;&#039;:&lt;br /&gt;
*&#039;&#039;&#039;get_bool_variable(var_name)&#039;&#039;&#039;:&lt;br /&gt;
*&#039;&#039;&#039;get_str_variable(var_name)&#039;&#039;&#039;:&lt;br /&gt;
*&#039;&#039;&#039;clear_playlist()&#039;&#039;&#039;: Clear the playlist.&lt;br /&gt;
*&#039;&#039;&#039;add_item(mrl)&#039;&#039;&#039;: Append an item whose location is given by the [[media resource locator]] to the playlist.&lt;br /&gt;
*&#039;&#039;&#039;next()&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;previous()&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;isplaying()&#039;&#039;&#039;: return true if the plugin is playing something.&lt;br /&gt;
*&#039;&#039;&#039;get_length()&#039;&#039;&#039;: Get the media&#039;s length in seconds.&lt;br /&gt;
*&#039;&#039;&#039;get_position()&#039;&#039;&#039;: Get the current position in the media in percent.&lt;br /&gt;
*&#039;&#039;&#039;get_time()&#039;&#039;&#039;: Get the current position in the media in seconds.&lt;br /&gt;
*&#039;&#039;&#039;seek(seconds,is_relative)&#039;&#039;&#039;: If is_relative is true, seek relatively to current time, else seek from beginning of the stream. Seek time is specified in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here are a few examples of HTML pages that use the&lt;br /&gt;
Mozilla plugin.&lt;br /&gt;
&lt;br /&gt;
===Example 1===&lt;br /&gt;
&lt;br /&gt;
In this example, the plugin will read an HTTP stream inside the web page. If the user goes fullscreen, he will have to press &#039;&#039;f&#039;&#039; or double-click on the video to go back in normal view.&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;html&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;head&amp;amp;gt;&amp;amp;lt;title&amp;amp;gt;Demo of VLC mozilla plugin&amp;amp;lt;/title&amp;amp;gt;&amp;amp;lt;/head&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;body&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;h1&amp;amp;gt;Demo of VLC mozilla plugin - Example 1&amp;amp;lt;/h1&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;embed type=&amp;quot;application/x-vlc-plugin&amp;quot;&lt;br /&gt;
          name=&amp;quot;video1&amp;quot;&lt;br /&gt;
          autoplay=&amp;quot;no&amp;quot; loop=&amp;quot;yes&amp;quot; width=&amp;quot;400&amp;quot; height=&amp;quot;300&amp;quot;&lt;br /&gt;
          target=&amp;quot;http://server.example.org/video1.vob&amp;quot; /&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;br /&amp;amp;gt;&lt;br /&gt;
   &amp;amp;lt;a href=&amp;quot;javascript:;&amp;quot; onclick=&#039;document.video1.play()&#039;&amp;amp;gt;Play video1&amp;amp;lt;/a&amp;amp;gt;&lt;br /&gt;
   &amp;amp;lt;a href=&amp;quot;javascript:;&amp;quot; onclick=&#039;document.video1.pause()&#039;&amp;amp;gt;Pause video1&amp;amp;lt;/a&amp;amp;gt;&lt;br /&gt;
   &amp;amp;lt;a href=&amp;quot;javascript:;&amp;quot; onclick=&#039;document.video1.stop()&#039;&amp;amp;gt;Stop video1&amp;amp;lt;/a&amp;amp;gt;&lt;br /&gt;
   &amp;amp;lt;a href=&amp;quot;javascript:;&amp;quot; onclick=&#039;document.video1.fullscreen()&#039;&amp;amp;gt;Fullscreen&amp;amp;lt;/a&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;/body&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;/html&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Example 2===&lt;br /&gt;
&lt;br /&gt;
In this example, the plugin will read a multicast UDP/RTP stream in a dedicated video output window.&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;html&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;head&amp;amp;gt;&amp;amp;lt;title&amp;amp;gt;Demo of VLC mozilla plugin&amp;amp;lt;/title&amp;amp;gt;&amp;amp;lt;/head&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;body&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;h1&amp;amp;gt;Demo of VLC mozilla plugin - Example 2&amp;amp;lt;/h1&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;embed type=&amp;quot;application/x-vlc-plugin&amp;quot;&lt;br /&gt;
          name=&amp;quot;video2&amp;quot;&lt;br /&gt;
          autoplay=&amp;quot;no&amp;quot; loop=&amp;quot;no&amp;quot; hidden=&amp;quot;yes&amp;quot;&lt;br /&gt;
          target=&amp;quot;rtp://@239.255.12.42:5004&amp;quot; /&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;br /&amp;amp;gt;&lt;br /&gt;
   &amp;amp;lt;a href=&amp;quot;javascript:;&amp;quot; onclick=&#039;document.video2.play()&#039;&amp;amp;gt;Play video2&amp;amp;lt;/a&amp;amp;gt;&lt;br /&gt;
   &amp;amp;lt;a href=&amp;quot;javascript:;&amp;quot; onclick=&#039;document.video2.stop()&#039;&amp;amp;gt;Stop video2&amp;amp;lt;/a&amp;amp;gt;&lt;br /&gt;
   &amp;amp;lt;a href=&amp;quot;javascript:;&amp;quot; onclick=&#039;document.video2.fullscreen()&#039;&amp;amp;gt;Fullscreen&amp;amp;lt;/a&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;/body&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;/html&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
[[Category:Embedded]]&lt;/div&gt;</summary>
		<author><name>Munich</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=WxVLCBackend&amp;diff=16366</id>
		<title>WxVLCBackend</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=WxVLCBackend&amp;diff=16366"/>
		<updated>2010-06-20T17:11:21Z</updated>

		<summary type="html">&lt;p&gt;Munich: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Lowercase}}&lt;br /&gt;
== Intro ==  &lt;br /&gt;
Although vlc is moving [[Qt_and_GTK|away]] from wxwidgets this is an attemp to move wxwidgets towards vlc (libvlc to be more precise)..&lt;br /&gt;
The libvlc API is fairly new and VERY promissing.. It exports ALL the functionality of vlc into a nice c API .&lt;br /&gt;
On the other hand wxWidgets is a very rich [http://www.wxwidgets.org/docs/hierarchy_stable_image.htm] ( and also community based ) growing X platform library. It covers the 3 basic platforms (MSW, LINUX, MAC) and more[http://wiki.wxwidgets.org/Supported_Platforms]..&lt;br /&gt;
&lt;br /&gt;
== wxVLCBackend ==&lt;br /&gt;
wxVLCBackend v2 is a wxMediaCtrl backend. The latter is a stub media player in wxWidgets and provides an interface for various kinds of backends (gssteamer, wmp,...). &lt;br /&gt;
wxVLCBackend maybe integrated in the official wxwidgets code..&lt;br /&gt;
The backend code provides a guide to integrade libvlc in other c/c++ gui frameworks as well. In fact the only TRICKY part was to get a low-level hadle for the drawable surface.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Right now&#039;&#039;&#039; (29/10/08) The code is not mature enough for publication. There are some stability issues. To correct them i&#039;ve created a mini (Poc) wxWidgets based app to isolate these issues, wxvlc_test.&lt;br /&gt;
&lt;br /&gt;
==wxvlc_test==&lt;br /&gt;
wxvlc_test is a simple wxWidgets based app. It has a textbox where you give a media filename and a play, stop button to control playback. In my tests wxvlc_test &#039;&#039;&#039;crashes&#039;&#039;&#039; when starting playing ( somewhere inside libavcodec library with no other dubuging symbols ) *some* avis.. On the other hand vlc plays these same files smoothly.&lt;br /&gt;
&lt;br /&gt;
***Tests were done on vlc-0.9.5&lt;br /&gt;
&lt;br /&gt;
My intentions for this publication are :&lt;br /&gt;
a) to test the glue code on other systems ( my tests are on &#039;&#039;&#039;linux ONLY&#039;&#039;&#039; so dont ask me, but windows could be tested too )&lt;br /&gt;
b) to check the glue code correctness by a vlc internalls well-knower (maybe i miss something,&lt;br /&gt;
cause i cant explain that libavcodec crashes)&lt;br /&gt;
&lt;br /&gt;
Information for wxvlc_test is provided in the README as well&lt;br /&gt;
&lt;br /&gt;
=== wxvlc_test v0.1 source ===&lt;br /&gt;
&lt;br /&gt;
The program is provided under patch format here. Copy and paste the following to a new patch file ( say wxvlc.patch) and &amp;quot;apply&amp;quot; it with  &lt;br /&gt;
patch -Np0 &amp;lt; ../wxvlc.patch&lt;br /&gt;
this will create a new dir with all the needed files inside&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff -Nur wxvlc_test-0.1/Makefile wxvlc_test/Makefile&lt;br /&gt;
--- wxvlc_test-0.1/Makefile	1970-01-01 02:00:00.000000000 +0200&lt;br /&gt;
+++ wxvlc_test/Makefile	2008-10-28 12:09:10.000000000 +0200&lt;br /&gt;
@@ -0,0 +1,44 @@&lt;br /&gt;
+&lt;br /&gt;
+CC = g++&lt;br /&gt;
+CFLAGS += -O2 -g -Wall&lt;br /&gt;
+# vlc incs should be on the system (at least for GTK )&lt;br /&gt;
+INCS = `wx-config --cflags`&lt;br /&gt;
+# &amp;lt;------------ MOD HERE&lt;br /&gt;
+# xtra incs for the gtk build.... Don&#039;t know know how to contitionaly compile.. Comment out on non gtk platforms&lt;br /&gt;
+INCS +=	-I/usr/include/gtk-2.0 \&lt;br /&gt;
+		-I/usr/include/pango-1.0 \&lt;br /&gt;
+		-I/usr/include/cairo \&lt;br /&gt;
+		-I/usr/include/glib-2.0 \&lt;br /&gt;
+		-I/usr/lib/glib-2.0/include \&lt;br /&gt;
+		-I/usr/lib/gtk-2.0/include \&lt;br /&gt;
+		-I/usr/include/atk-1.0&lt;br /&gt;
+&lt;br /&gt;
+LIBS = `wx-config --libs` -lvlc&lt;br /&gt;
+OBJS = test2App.o test2Main.o vlc_bind.o&lt;br /&gt;
+DEFS = &lt;br /&gt;
+&lt;br /&gt;
+###########################################################################&lt;br /&gt;
+&lt;br /&gt;
+# it is first and executed by default&lt;br /&gt;
+default: wxvlc_test&lt;br /&gt;
+&lt;br /&gt;
+all: wxvlc_test&lt;br /&gt;
+&lt;br /&gt;
+##### libraries&lt;br /&gt;
+&lt;br /&gt;
+wxvlc_test: $(OBJS) &lt;br /&gt;
+	$(CC) $(CFLAGS) $(DEFS) $(INCS) $(OBJS) $(LIBS) -o wxvlc_test&lt;br /&gt;
+&lt;br /&gt;
+# Make the o&#039;s out of c&#039;s&lt;br /&gt;
+# $&amp;lt; she who initiated the implicit actions&lt;br /&gt;
+# $* prefix shared by taget and deps&lt;br /&gt;
+# c.o  c &amp;lt;= depends on &amp;lt;= o&lt;br /&gt;
+.cpp.o: $*.h&lt;br /&gt;
+	$(CC) $(CFLAGS) $(DEFS) $(INCS) -c $&amp;lt; -o $@&lt;br /&gt;
+&lt;br /&gt;
+&lt;br /&gt;
+# Clean target&lt;br /&gt;
+clean:&lt;br /&gt;
+	rm -f *.[o] &lt;br /&gt;
+&lt;br /&gt;
+&lt;br /&gt;
diff -Nur wxvlc_test-0.1/README wxvlc_test/README&lt;br /&gt;
--- wxvlc_test-0.1/README	1970-01-01 02:00:00.000000000 +0200&lt;br /&gt;
+++ wxvlc_test/README	2008-10-28 12:38:54.000000000 +0200&lt;br /&gt;
@@ -0,0 +1,29 @@&lt;br /&gt;
+-- INTRO&lt;br /&gt;
+wxvlc_test v0.1&lt;br /&gt;
+&lt;br /&gt;
+This is a mini library for libvlc integration into wxWidgets apps . Its a poC&lt;br /&gt;
+ and is intented to test it for stability. It is part of the wxVLCMediaBackend v2&lt;br /&gt;
+ for integration into wxMediaCtrl as a Bakend...[It is not published yet (10.08)] &lt;br /&gt;
+&lt;br /&gt;
+&lt;br /&gt;
+--USAGE&lt;br /&gt;
+-Make sure you have wxWIdgets 2.8 installed (don&#039;t know for later versions, &lt;br /&gt;
+but i think 2.6 should work). &lt;br /&gt;
+-Make sure you have vlc installed.. Ok we test on linux, so it means libvlc is&lt;br /&gt;
+ in path as well as the plugins. &lt;br /&gt;
+ You need to comment some lines at Makefile ( Noted) for windows and make &lt;br /&gt;
+ sure the linker can &amp;quot;see&amp;quot;  libvlc.dll. It is not tested so don&#039;t ask me .&lt;br /&gt;
+&lt;br /&gt;
+$make&lt;br /&gt;
+$./wxvlc_test&lt;br /&gt;
+&lt;br /&gt;
+&lt;br /&gt;
+--ISSUES&lt;br /&gt;
+It crashes with some AVI files. Dont know what it is ...&lt;br /&gt;
+&lt;br /&gt;
+&lt;br /&gt;
+-- LIC&lt;br /&gt;
+-this code is left to the &amp;quot;public&amp;quot; as is without ANY waranty, the authors CANNOT be&lt;br /&gt;
+	held responsible if it blows your house or something...	 &lt;br /&gt;
+&lt;br /&gt;
+	basos    2008    &amp;lt; noxelia 4t gmail c0m &amp;gt;&lt;br /&gt;
diff -Nur wxvlc_test-0.1/test2App.cpp wxvlc_test/test2App.cpp&lt;br /&gt;
--- wxvlc_test-0.1/test2App.cpp	1970-01-01 02:00:00.000000000 +0200&lt;br /&gt;
+++ wxvlc_test/test2App.cpp	2008-11-08 20:06:37.000000000 +0200&lt;br /&gt;
@@ -0,0 +1,64 @@&lt;br /&gt;
+/***************************************************************&lt;br /&gt;
&lt;br /&gt;
+ * Name:      test2App.cpp&lt;br /&gt;
&lt;br /&gt;
+ * Purpose:   Code for Application Class&lt;br /&gt;
&lt;br /&gt;
+ * Author:    basOS&lt;br /&gt;
&lt;br /&gt;
+ * Created:   2008-07-05&lt;br /&gt;
&lt;br /&gt;
+ * Copyright: basOS ()&lt;br /&gt;
&lt;br /&gt;
+ * License:&lt;br /&gt;
&lt;br /&gt;
+ **************************************************************/&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+#ifdef WX_PRECOMP&lt;br /&gt;
&lt;br /&gt;
+#include &amp;quot;wx_pch.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
+#endif&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+#ifdef __BORLANDC__&lt;br /&gt;
&lt;br /&gt;
+#pragma hdrstop&lt;br /&gt;
&lt;br /&gt;
+#endif //__BORLANDC__&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+#include &amp;quot;test2App.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
+#include &amp;quot;test2Main.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
+#include &amp;quot;wx/cmdline.h&amp;quot;     //for wxCmdLineParser (optional)&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+IMPLEMENT_APP(appVlctest)&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+bool appVlctest::OnInit()&lt;br /&gt;
&lt;br /&gt;
+{&lt;br /&gt;
+	wxString filename ;&lt;br /&gt;
&lt;br /&gt;
+#if wxUSE_CMDLINE_PARSER&lt;br /&gt;
+    //&lt;br /&gt;
+    //  What this does is get all the command line arguments&lt;br /&gt;
+    //  and treat each one as a file to put to the initial playlist&lt;br /&gt;
+    //&lt;br /&gt;
+    wxCmdLineEntryDesc cmdLineDesc[2];&lt;br /&gt;
+    cmdLineDesc[0].kind = wxCMD_LINE_PARAM;&lt;br /&gt;
+    cmdLineDesc[0].shortName = NULL;&lt;br /&gt;
+    cmdLineDesc[0].longName = NULL;&lt;br /&gt;
+    cmdLineDesc[0].description = wxT(&amp;quot;input files&amp;quot;);&lt;br /&gt;
+    cmdLineDesc[0].type = wxCMD_LINE_VAL_STRING;&lt;br /&gt;
+    cmdLineDesc[0].flags = wxCMD_LINE_PARAM_OPTIONAL | wxCMD_LINE_PARAM_MULTIPLE;&lt;br /&gt;
+&lt;br /&gt;
+    cmdLineDesc[1].kind = wxCMD_LINE_NONE;&lt;br /&gt;
+&lt;br /&gt;
+    //gets the passed media files from cmd line&lt;br /&gt;
+    wxCmdLineParser parser (cmdLineDesc, argc, argv);&lt;br /&gt;
+&lt;br /&gt;
+    // get filenames from the commandline&lt;br /&gt;
+    if (parser.Parse() == 0)&lt;br /&gt;
+    {&lt;br /&gt;
+        for (size_t paramNr=0; paramNr &amp;lt; parser.GetParamCount(); ++paramNr)&lt;br /&gt;
+        {&lt;br /&gt;
+            filename = parser.GetParam (paramNr) ;&lt;br /&gt;
+			break ;&lt;br /&gt;
+        }&lt;br /&gt;
+    }&lt;br /&gt;
+#endif &lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    f_main *frame  = new f_main( _T(&amp;quot;Vlc test app&amp;quot;), wxPoint(50,150),wxSize(450,390));&lt;br /&gt;
+	frame-&amp;gt;filename = filename ;&lt;br /&gt;
+    frame-&amp;gt;Show(TRUE);&lt;br /&gt;
&lt;br /&gt;
+    SetTopWindow(frame);&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    return TRUE;&lt;br /&gt;
&lt;br /&gt;
+}&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
diff -Nur wxvlc_test-0.1/test2App.h wxvlc_test/test2App.h&lt;br /&gt;
--- wxvlc_test-0.1/test2App.h	1970-01-01 02:00:00.000000000 +0200&lt;br /&gt;
+++ wxvlc_test/test2App.h	2008-11-08 20:06:36.000000000 +0200&lt;br /&gt;
@@ -0,0 +1,26 @@&lt;br /&gt;
+/***************************************************************&lt;br /&gt;
&lt;br /&gt;
+ * Name:      test2App.h&lt;br /&gt;
&lt;br /&gt;
+ * Purpose:   Defines Application Class&lt;br /&gt;
&lt;br /&gt;
+ * Author:    basOS &lt;br /&gt;
&lt;br /&gt;
+ * Created:   2008-07-05&lt;br /&gt;
&lt;br /&gt;
+ * Copyright: basOS ()&lt;br /&gt;
&lt;br /&gt;
+ * License:&lt;br /&gt;
&lt;br /&gt;
+ **************************************************************/&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+#ifndef TEST2APP_H&lt;br /&gt;
&lt;br /&gt;
+#define TEST2APP_H&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+#include &amp;lt;wx/app.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+class appVlctest : public wxApp&lt;br /&gt;
&lt;br /&gt;
+{&lt;br /&gt;
&lt;br /&gt;
+    wxIcon* ic_app;&lt;br /&gt;
&lt;br /&gt;
+    virtual bool OnInit();&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    protected:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
+};&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+#endif // TEST2APP_H&lt;br /&gt;
diff -Nur wxvlc_test-0.1/test2Main.cpp wxvlc_test/test2Main.cpp&lt;br /&gt;
--- wxvlc_test-0.1/test2Main.cpp	1970-01-01 02:00:00.000000000 +0200&lt;br /&gt;
+++ wxvlc_test/test2Main.cpp	2008-11-08 20:06:35.000000000 +0200&lt;br /&gt;
@@ -0,0 +1,225 @@&lt;br /&gt;
+/***************************************************************&lt;br /&gt;
&lt;br /&gt;
+ * Name:      test2Main.cpp&lt;br /&gt;
&lt;br /&gt;
+ * Purpose:   Code for Application Frame&lt;br /&gt;
&lt;br /&gt;
+ * Author:    basOS&lt;br /&gt;
&lt;br /&gt;
+ * Created:   2008-07-05&lt;br /&gt;
&lt;br /&gt;
+ * Copyright: basOS ()&lt;br /&gt;
&lt;br /&gt;
+ * License:&lt;br /&gt;
&lt;br /&gt;
+ **************************************************************/&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+#ifdef WX_PRECOMP&lt;br /&gt;
&lt;br /&gt;
+#include &amp;quot;wx_pch.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
+#endif&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+#ifdef __BORLANDC__&lt;br /&gt;
&lt;br /&gt;
+#pragma hdrstop&lt;br /&gt;
&lt;br /&gt;
+#endif //__BORLANDC__&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+#include &amp;quot;test2Main.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+#include &amp;lt;wx/dir.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
+#include &amp;lt;wx/filename.h&amp;gt;&lt;br /&gt;
+#include &amp;lt;wx/debug.h&amp;gt;&lt;br /&gt;
+&lt;br /&gt;
+//#include &amp;lt;wx/filename.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+//helper functions&lt;br /&gt;
&lt;br /&gt;
+enum wxbuildinfoformat {&lt;br /&gt;
&lt;br /&gt;
+    short_f, long_f&lt;br /&gt;
&lt;br /&gt;
+};&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+wxString wxbuildinfo(wxbuildinfoformat format)&lt;br /&gt;
&lt;br /&gt;
+{&lt;br /&gt;
&lt;br /&gt;
+    wxString wxbuild(wxVERSION_STRING);&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    if (format == long_f )&lt;br /&gt;
&lt;br /&gt;
+    {&lt;br /&gt;
&lt;br /&gt;
+#if defined(__WXMSW__)&lt;br /&gt;
&lt;br /&gt;
+        wxbuild &amp;lt;&amp;lt; _T(&amp;quot;-Windows&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
+#elif defined(__WXMAC__)&lt;br /&gt;
&lt;br /&gt;
+        wxbuild &amp;lt;&amp;lt; _T(&amp;quot;-Mac&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
+#elif defined(__UNIX__)&lt;br /&gt;
&lt;br /&gt;
+        wxbuild &amp;lt;&amp;lt; _T(&amp;quot;-Linux&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
+#endif&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+#if wxUSE_UNICODE&lt;br /&gt;
&lt;br /&gt;
+        wxbuild &amp;lt;&amp;lt; _T(&amp;quot;-Unicode build&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
+#else&lt;br /&gt;
&lt;br /&gt;
+        wxbuild &amp;lt;&amp;lt; _T(&amp;quot;-ANSI build&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
+#endif // wxUSE_UNICODE&lt;br /&gt;
&lt;br /&gt;
+    }&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    return wxbuild;&lt;br /&gt;
&lt;br /&gt;
+}&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+   f_main::f_main(const wxString&amp;amp; title, const wxPoint&amp;amp; pos, const wxSize&amp;amp; size)&lt;br /&gt;
&lt;br /&gt;
+    : wxFrame(0L, -1, title)&lt;br /&gt;
&lt;br /&gt;
+    {&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+        /*  add menu  */&lt;br /&gt;
&lt;br /&gt;
+        wxMenu *mnu = new wxMenu;&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+        mnu-&amp;gt;Append(ID_ABOUT, _(&amp;quot;&amp;amp;About me&amp;quot;),_(&amp;quot;Useless information&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
+        mnu-&amp;gt;Append(ID_QUIT, _(&amp;quot;Qui&amp;amp;t da app&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+        wxMenuBar *mnuB = new wxMenuBar;&lt;br /&gt;
&lt;br /&gt;
+        mnuB-&amp;gt;Append (mnu, _(&amp;quot;&amp;amp;Gen&amp;quot;) ) ;&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+        // Connect (wxEVT_PAINT,wxPaintEventHandler(f_main::OnPaint));&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+        SetMenuBar (mnuB);&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+        /* add status bar */&lt;br /&gt;
&lt;br /&gt;
+#if wxUSE_STATUSBAR&lt;br /&gt;
&lt;br /&gt;
+        CreateStatusBar(2);&lt;br /&gt;
&lt;br /&gt;
+        SetStatusText(wxbuildinfo(long_f), 1);&lt;br /&gt;
&lt;br /&gt;
+        SetStatusText ( _(&amp;quot;Welcome to a wxwidgeted and vlc proof of concept&amp;quot;),0);&lt;br /&gt;
&lt;br /&gt;
+#endif&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+        //initialize&lt;br /&gt;
&lt;br /&gt;
+        bt_capture_label[ON] = _(&amp;quot;Stop&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
+        bt_capture_label[OFF] = _(&amp;quot;Play&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+        //design form&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
+		wxBoxSizer* bxv1 = new wxBoxSizer( wxVERTICAL );&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+        //create widgets&lt;br /&gt;
&lt;br /&gt;
+        pn_image = new wxPanel(this,-1,wxPoint(-1,-1),wxSize(250,250));&lt;br /&gt;
+        pn_image-&amp;gt;SetBackgroundColour( *wxBLACK ) ;&lt;br /&gt;
+		bxv1-&amp;gt;Add( pn_image, 1 ,wxALIGN_CENTER | wxSHAPED | wxALL, 5 );&lt;br /&gt;
+&lt;br /&gt;
+		wxBoxSizer* bxh12 = new wxBoxSizer( wxHORIZONTAL ) ;&lt;br /&gt;
&lt;br /&gt;
+        bt_cap = new wxButton(this,ID_PLAY,bt_capture_label[OFF]);&lt;br /&gt;
&lt;br /&gt;
+		bxh12-&amp;gt;Add( bt_cap, 0, wxRIGHT, 5 ) ;&lt;br /&gt;
+		wxButton* bt_stop = new wxButton(this, ID_STOP, _T(&amp;quot;Stop&amp;quot;) ) ;&lt;br /&gt;
+		bxh12-&amp;gt;Add( bt_stop, 0 , wxRIGHT, 5 );&lt;br /&gt;
+		&lt;br /&gt;
+		tx_fname = new wxTextCtrl( this, wxID_ANY, filename ) ;&lt;br /&gt;
+		bxh12-&amp;gt;Add( tx_fname,1, wxRIGHT, 5 ) ;&lt;br /&gt;
+	&lt;br /&gt;
+		bxv1-&amp;gt;Add( bxh12, 0, wxEXPAND | wxALIGN_CENTER | wxALL, 5 );&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+        this-&amp;gt;SetSizer(bxv1);&lt;br /&gt;
&lt;br /&gt;
+        bxv1-&amp;gt;SetSizeHints(this);&lt;br /&gt;
+        bxv1-&amp;gt;Fit(this) ;&lt;br /&gt;
+&lt;br /&gt;
+		// Backend&lt;br /&gt;
+		//This takes the std out from vlc &lt;br /&gt;
+		//wxLogDebug(_T(&amp;quot;starting up vlc engine...&amp;quot;)) ;&lt;br /&gt;
+		if ( vlc_bind( pn_image ) )&lt;br /&gt;
+			wxLogDebug( _T(&amp;quot;vlc library initialized ok&amp;quot;));&lt;br /&gt;
+&lt;br /&gt;
+&lt;br /&gt;
+        //event handlers&lt;br /&gt;
&lt;br /&gt;
+        Connect (ID_ABOUT, wxEVT_COMMAND_MENU_SELECTED,wxCommandEventHandler(f_main::OnAbout));&lt;br /&gt;
&lt;br /&gt;
+        Connect (ID_QUIT, wxEVT_COMMAND_MENU_SELECTED,wxCommandEventHandler(f_main::OnQuit));&lt;br /&gt;
&lt;br /&gt;
+        Connect (wxEVT_CLOSE_WINDOW ,wxCloseEventHandler(f_main::OnClose));&lt;br /&gt;
&lt;br /&gt;
+        Connect (ID_PLAY,wxEVT_COMMAND_BUTTON_CLICKED , wxCommandEventHandler(f_main::OnPlay));&lt;br /&gt;
+        Connect (ID_STOP,wxEVT_COMMAND_BUTTON_CLICKED , wxCommandEventHandler(f_main::OnStop));&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    }&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    //Event Handlers&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    void f_main::OnQuit(wxCommandEvent&amp;amp; WXUNUSED(event))&lt;br /&gt;
&lt;br /&gt;
+    {&lt;br /&gt;
&lt;br /&gt;
+       // Close(TRUE);&lt;br /&gt;
&lt;br /&gt;
+        wxMessageBox (_T(&amp;quot;Bye....&amp;quot;),_T(&amp;quot;exit&amp;quot;), wxOK | wxICON_HAND, this);&lt;br /&gt;
+		Close() ;&lt;br /&gt;
&lt;br /&gt;
+    }&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    void f_main::OnAbout(wxCommandEvent&amp;amp; WXUNUSED(event))&lt;br /&gt;
&lt;br /&gt;
+    {&lt;br /&gt;
+	#if 0&lt;br /&gt;
&lt;br /&gt;
+        wxDialog* mss = new wxDialog ((wxWindow*)this,(wxWindowID)-1,_(&amp;quot;About Hello W&amp;quot;),wxPoint(-1,-1));&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+        // Create a box sizer&lt;br /&gt;
&lt;br /&gt;
+        wxBoxSizer* bxv = new wxBoxSizer(wxVERTICAL);&lt;br /&gt;
&lt;br /&gt;
+        wxBoxSizer* bxh1 = new wxBoxSizer(wxHORIZONTAL);&lt;br /&gt;
&lt;br /&gt;
+        wxSizer* bxh2 = mss-&amp;gt;CreateButtonSizer(wxOK);&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+        // add an icon to theleft and leave 10pxs border to the righ&lt;br /&gt;
&lt;br /&gt;
+        //wxIcon* icc = new wxIcon(this-&amp;gt;GetIcon());&lt;br /&gt;
&lt;br /&gt;
+        //mss-&amp;gt;SetIcon(*icc);&lt;br /&gt;
&lt;br /&gt;
+        //wxPanel* pic = new wxPanel(mss,-1,wxPoint(-1,-1),wxSize(icc-&amp;gt;GetWidth(),icc-&amp;gt;GetHeight()));&lt;br /&gt;
&lt;br /&gt;
+        //pic-&amp;gt;Show();&lt;br /&gt;
&lt;br /&gt;
+        //wxClientDC* dc = new wxClientDC(pic);&lt;br /&gt;
&lt;br /&gt;
+        //dc-&amp;gt;DrawBitmap(*icc,0,0,false);&lt;br /&gt;
&lt;br /&gt;
+        //bxh1-&amp;gt;Add(pic, 0, wxEXPAND |wxALIGN_LEFT| wxRIGHT,10);&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+        //Add a text label and leave 10 pxs from right&lt;br /&gt;
&lt;br /&gt;
+        wxStaticText* txx = new wxStaticText(mss,-1,_(&amp;quot;This is a useless but proof of concept first program on wxWidgets programming\n style.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
+        &amp;quot; More on the edge of coding&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
+        bxh1-&amp;gt;Add(txx,1, wxRIGHT,10);&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+        //add two horizontal sizers to the main vertical one&lt;br /&gt;
&lt;br /&gt;
+        bxv-&amp;gt;Add(bxh1,1,wxBOTTOM | wxEXPAND,10); // add 10px border bottom&lt;br /&gt;
&lt;br /&gt;
+        bxv-&amp;gt;Add(bxh2,1);&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+        //Set the sizer to the dialog box&lt;br /&gt;
&lt;br /&gt;
+        mss-&amp;gt;SetSizer(bxv);&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+        //show da dialogi&lt;br /&gt;
&lt;br /&gt;
+        mss-&amp;gt;ShowModal();&lt;br /&gt;
&lt;br /&gt;
+	#endif&lt;br /&gt;
&lt;br /&gt;
+        wxMessageDialog msg(this,_T(&amp;quot;This is a useless but proof of concept first program on wxWidgets programming\n style.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
+        &amp;quot; More on the edge of coding&amp;quot;),_T(&amp;quot;About Hello W&amp;quot;), wxOK);&lt;br /&gt;
&lt;br /&gt;
+        //wxIcon c_app_icon(wxICON(damage_smile));&lt;br /&gt;
&lt;br /&gt;
+        //msg.SetIcon(c_app_icon);&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+        msg.ShowModal();&lt;br /&gt;
&lt;br /&gt;
+        &lt;br /&gt;
&lt;br /&gt;
+        //delete ics;&lt;br /&gt;
&lt;br /&gt;
+    }&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+     void f_main::OnPlay(wxCommandEvent&amp;amp; WXUNUSED(event))&lt;br /&gt;
&lt;br /&gt;
+    {&lt;br /&gt;
+&lt;br /&gt;
+		wxString filename;&lt;br /&gt;
+		filename = tx_fname-&amp;gt;GetValue() ;&lt;br /&gt;
+		if ( filename == _T(&amp;quot;&amp;quot;)) {&lt;br /&gt;
+			wxLogError( _T(&amp;quot;Empty text file&amp;quot;) );&lt;br /&gt;
+			return ;&lt;br /&gt;
+		}&lt;br /&gt;
+		if (!wxFileName::FileExists( filename) ) {&lt;br /&gt;
+			wxLogError( _T(&amp;quot;File %s does not exist&amp;quot;), filename.c_str() );&lt;br /&gt;
+			return ;&lt;br /&gt;
+		}&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+        vlc_load( filename);&lt;br /&gt;
+		wxMilliSleep( 1000* 1.5 );&lt;br /&gt;
+		vlc_play() ;&lt;br /&gt;
&lt;br /&gt;
+    }&lt;br /&gt;
+&lt;br /&gt;
+     void f_main::OnStop(wxCommandEvent&amp;amp; WXUNUSED(event))&lt;br /&gt;
&lt;br /&gt;
+    {&lt;br /&gt;
+		vlc_stop() ;&lt;br /&gt;
+	}&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+ &lt;br /&gt;
&lt;br /&gt;
+    void f_main::OnClose(wxCloseEvent&amp;amp; event)&lt;br /&gt;
&lt;br /&gt;
+    {&lt;br /&gt;
&lt;br /&gt;
+        if (event.CanVeto()) {&lt;br /&gt;
&lt;br /&gt;
+            //could ask user here&lt;br /&gt;
&lt;br /&gt;
+            //could avoid destr and call event.Veto();&lt;br /&gt;
&lt;br /&gt;
+            // and return&lt;br /&gt;
&lt;br /&gt;
+        }&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    /*    list_object_t::iterator iter;&lt;br /&gt;
&lt;br /&gt;
+        wxObject * tobj;&lt;br /&gt;
&lt;br /&gt;
+        for (iter = garbage_col.begin(); iter != garbage_col.end(); ++iter) {&lt;br /&gt;
&lt;br /&gt;
+            //make clean TM&lt;br /&gt;
&lt;br /&gt;
+            //List of type wxObjects. It stores pointer to objects so iter is a pointer to object&lt;br /&gt;
&lt;br /&gt;
+            tobj = *iter;&lt;br /&gt;
&lt;br /&gt;
+            delete(tobj);&lt;br /&gt;
&lt;br /&gt;
+        }&lt;br /&gt;
+    */&lt;br /&gt;
+		vlc_shut() ;&lt;br /&gt;
&lt;br /&gt;
+        this-&amp;gt;Destroy();&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    }&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
diff -Nur wxvlc_test-0.1/test2Main.h wxvlc_test/test2Main.h&lt;br /&gt;
--- wxvlc_test-0.1/test2Main.h	1970-01-01 02:00:00.000000000 +0200&lt;br /&gt;
+++ wxvlc_test/test2Main.h	2008-11-08 20:06:35.000000000 +0200&lt;br /&gt;
@@ -0,0 +1,63 @@&lt;br /&gt;
+/***************************************************************&lt;br /&gt;
&lt;br /&gt;
+ * Name:      test2Main.h&lt;br /&gt;
&lt;br /&gt;
+ * Purpose:   Defines Application Frame&lt;br /&gt;
&lt;br /&gt;
+ * Author:    basOS &lt;br /&gt;
&lt;br /&gt;
+ * Created:   2008-07-05&lt;br /&gt;
&lt;br /&gt;
+ * Copyright: basOS ()&lt;br /&gt;
&lt;br /&gt;
+ * License:&lt;br /&gt;
&lt;br /&gt;
+ **************************************************************/&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+#ifndef TEST2MAIN_H&lt;br /&gt;
&lt;br /&gt;
+#define TEST2MAIN_H&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+#ifndef WX_PRECOMP&lt;br /&gt;
&lt;br /&gt;
+    #include &amp;lt;wx/wx.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
+#endif&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+#include &amp;quot;test2App.h&amp;quot;&lt;br /&gt;
+#include &amp;quot;vlc_bind.h&amp;quot;&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+class f_main : public wxFrame&lt;br /&gt;
&lt;br /&gt;
+{&lt;br /&gt;
&lt;br /&gt;
+    public:&lt;br /&gt;
&lt;br /&gt;
+	wxString filename ;&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    f_main(const wxString&amp;amp; title, const wxPoint&amp;amp; pos, const wxSize&amp;amp; size);&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    private:&lt;br /&gt;
&lt;br /&gt;
+    enum {&lt;br /&gt;
&lt;br /&gt;
+        ID_QUIT ,&lt;br /&gt;
&lt;br /&gt;
+        ID_ABOUT,&lt;br /&gt;
&lt;br /&gt;
+        ID_PLAY,&lt;br /&gt;
+		ID_STOP,&lt;br /&gt;
&lt;br /&gt;
+    };&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    //Event Handlers&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    void OnQuit(wxCommandEvent&amp;amp; WXUNUSED(event));&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    void OnAbout(wxCommandEvent&amp;amp; WXUNUSED(event));&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    void OnPlay(wxCommandEvent&amp;amp; event);&lt;br /&gt;
+&lt;br /&gt;
+    void OnStop(wxCommandEvent&amp;amp; event);&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    void OnClose(wxCloseEvent&amp;amp; event);&lt;br /&gt;
&lt;br /&gt;
+    //other&lt;br /&gt;
&lt;br /&gt;
+    wxString bt_capture_label[2];&lt;br /&gt;
&lt;br /&gt;
+    enum cap_state {&lt;br /&gt;
&lt;br /&gt;
+        ON = 0,&lt;br /&gt;
&lt;br /&gt;
+        OFF&lt;br /&gt;
&lt;br /&gt;
+    };&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    wxPanel* pn_image ;&lt;br /&gt;
&lt;br /&gt;
+    wxButton* bt_cap;&lt;br /&gt;
+	wxTextCtrl* tx_fname ;&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    // garbage collector list&lt;br /&gt;
&lt;br /&gt;
+    //list_object_t garbage_col;&lt;br /&gt;
&lt;br /&gt;
+};&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+#endif // TEST2MAIN_H&lt;br /&gt;
diff -Nur wxvlc_test-0.1/vlc_bind.cpp wxvlc_test/vlc_bind.cpp&lt;br /&gt;
--- wxvlc_test-0.1/vlc_bind.cpp	1970-01-01 02:00:00.000000000 +0200&lt;br /&gt;
+++ wxvlc_test/vlc_bind.cpp	2008-10-28 12:01:52.000000000 +0200&lt;br /&gt;
@@ -0,0 +1,271 @@&lt;br /&gt;
+#if 1&lt;br /&gt;
+/* mini library for libvlc integration into wxWidgets apps &lt;br /&gt;
+	part of the wxVLCMediaBackend v2...  &lt;br /&gt;
+    this code is left to the &amp;quot;public&amp;quot;	 &lt;br /&gt;
+	basos    2008    &amp;lt; noxelia 4t gmail c0m &amp;gt;&lt;br /&gt;
+*/&lt;br /&gt;
+&lt;br /&gt;
+//#include &amp;lt;wx/dynlib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
+//#include &amp;quot;test2Main.h&amp;quot;&lt;br /&gt;
+#include &amp;lt;wx/string.h&amp;gt;&lt;br /&gt;
+#include &amp;lt;wx/window.h&amp;gt;&lt;br /&gt;
+#include &amp;lt;wx/log.h&amp;gt;&lt;br /&gt;
+#include &amp;lt;wx/app.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
+#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
+#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+#include &amp;lt;vlc/vlc.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
+/* ** HACKS FOR WINDOW HANDLE **/&lt;br /&gt;
+#ifdef __WXGTK__ &lt;br /&gt;
+ #    include &amp;lt;gdk/gdkx.h&amp;gt; // GDK_WINDOW_XWINDOW is found here in wxWidgets 2.8.0&lt;br /&gt;
+ #    include &amp;quot;gdk/gdkprivate.h&amp;quot;&lt;br /&gt;
+ #if wxCHECK_VERSION(2, 8, 0)&lt;br /&gt;
+  #ifdef __WXGTK20__&lt;br /&gt;
+   #include &amp;lt;wx/gtk/win_gtk.h&amp;gt;&lt;br /&gt;
+  #else&lt;br /&gt;
+   #include &amp;lt;wx/gtk1/win_gtk.h&amp;gt;&lt;br /&gt;
+  #endif&lt;br /&gt;
+ #else&lt;br /&gt;
+  #include &amp;lt;wx/gtk/win_gtk.h&amp;gt;&lt;br /&gt;
+ #endif&lt;br /&gt;
+ #define GetXWindow(wxwin) (wxwin)-&amp;gt;m_wxwindow ? \&lt;br /&gt;
+                          GDK_WINDOW_XWINDOW(GTK_PIZZA((wxwin)-&amp;gt;m_wxwindow)-&amp;gt;bin_window) : \&lt;br /&gt;
+                          GDK_WINDOW_XWINDOW((wxwin)-&amp;gt;m_widget-&amp;gt;window)&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
+&lt;br /&gt;
+// GLOBALS&lt;br /&gt;
+static libvlc_instance_t * inst = NULL;&lt;br /&gt;
&lt;br /&gt;
+static libvlc_media_player_t *mp = NULL;&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+static void raisee (libvlc_exception_t * ex, wxString desc = _T(&amp;quot;&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
+{&lt;br /&gt;
&lt;br /&gt;
+    //if ((*pfnlibvlc_exception_raised) (ex))&lt;br /&gt;
&lt;br /&gt;
+    if (libvlc_exception_raised (ex))&lt;br /&gt;
&lt;br /&gt;
+    {&lt;br /&gt;
&lt;br /&gt;
+        wxString ss;&lt;br /&gt;
&lt;br /&gt;
+        const char * resp;&lt;br /&gt;
&lt;br /&gt;
+        wxCSConv mag(_T(&amp;quot;ISO-8859-1&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
+        resp = libvlc_exception_get_message(ex);&lt;br /&gt;
&lt;br /&gt;
+        //resp = (*pfnlibvlc_exception_get_message)(ex);&lt;br /&gt;
&lt;br /&gt;
+        wxString sex(resp, mag);&lt;br /&gt;
&lt;br /&gt;
+        ss.Printf(_T(&amp;quot;Exeption error: %s : %s\n&amp;quot;),sex.c_str(), desc.c_str());&lt;br /&gt;
&lt;br /&gt;
+        //ss.Printf(_T(&amp;quot;Exeption error: %s\n&amp;quot;),resp);&lt;br /&gt;
&lt;br /&gt;
+        wxLogError (ss);&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+        wxExit ();&lt;br /&gt;
&lt;br /&gt;
+    }&lt;br /&gt;
&lt;br /&gt;
+}&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
+//Given the Low Level id (yes XID cuases the mess ) hook et up&lt;br /&gt;
+void HookVideoWindow( libvlc_media_player_t* libvlc_mp, libvlc_drawable_t hwin)&lt;br /&gt;
+{&lt;br /&gt;
+    &lt;br /&gt;
+    libvlc_exception_t ex ;&lt;br /&gt;
+    libvlc_exception_init (&amp;amp;ex);&lt;br /&gt;
+&lt;br /&gt;
+	libvlc_media_player_set_drawable ( libvlc_mp, hwin, &amp;amp;ex );&lt;br /&gt;
+	&lt;br /&gt;
+}&lt;br /&gt;
+&lt;br /&gt;
+#ifdef __WXGTK__ //be it versions 1 or 2 ...&lt;br /&gt;
+void GtkWindowRealized(GtkWidget* wid, libvlc_media_player_t* mp)&lt;br /&gt;
+{&lt;br /&gt;
+    libvlc_drawable_t xid = GDK_WINDOW_XWINDOW( GTK_PIZZA(wid)-&amp;gt;bin_window );&lt;br /&gt;
+    wxLogDebug(_T(&amp;quot;wxVLCBackend::GtkRealization Callback wid=%x, **pizza=%x, XDrawable=%x&amp;quot;),&lt;br /&gt;
+            wid,&lt;br /&gt;
+            GTK_PIZZA( wid)-&amp;gt;bin_window,&lt;br /&gt;
+            xid );&lt;br /&gt;
+    wxASSERT( xid );&lt;br /&gt;
+    HookVideoWindow(mp, xid );&lt;br /&gt;
+}&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
+&lt;br /&gt;
+&lt;br /&gt;
+bool vlc_load( wxString media )&lt;br /&gt;
+{&lt;br /&gt;
+	wxASSERT( mp );&lt;br /&gt;
+    libvlc_exception_t ex ;&lt;br /&gt;
+    libvlc_exception_init (&amp;amp;ex);&lt;br /&gt;
+	&lt;br /&gt;
+	const char * filename;&lt;br /&gt;
+	wxCSConv convertor = wxConvLocal ;&lt;br /&gt;
+    int i_tsiz = (media.Length() + 1) ;&lt;br /&gt;
+    char* psz_tbuf = malloc( i_tsiz * sizeof(char) );&lt;br /&gt;
+    wxCHECK( psz_tbuf, false ) ; //on error return false&lt;br /&gt;
+    strncpy( psz_tbuf, media.mb_str( convertor ), i_tsiz );&lt;br /&gt;
+	filename = psz_tbuf ;&lt;br /&gt;
+	&lt;br /&gt;
+    libvlc_media_t *m;&lt;br /&gt;
+    /* Create a new item */&lt;br /&gt;
&lt;br /&gt;
+    //m = (*pfnlibvlc_media_new) (inst, filename, &amp;amp;ex);&lt;br /&gt;
&lt;br /&gt;
+    m = libvlc_media_new (inst, filename, &amp;amp;ex);&lt;br /&gt;
&lt;br /&gt;
+    raisee (&amp;amp;ex, _T(&amp;quot;media new&amp;quot;));&lt;br /&gt;
+&lt;br /&gt;
+	//internally retain&lt;br /&gt;
+	libvlc_media_player_set_media( mp, m, &amp;amp;ex );&lt;br /&gt;
+	raisee( &amp;amp;ex, _T(&amp;quot;media player set media&amp;quot;)) ;&lt;br /&gt;
+&lt;br /&gt;
+    /* No need to keep the media now */&lt;br /&gt;
&lt;br /&gt;
+    //(*pfnlibvlc_media_release) (m);&lt;br /&gt;
&lt;br /&gt;
+    libvlc_media_release (m);&lt;br /&gt;
+&lt;br /&gt;
+    /* play the media_player */&lt;br /&gt;
&lt;br /&gt;
+   //(*pfnlibvlc_media_player_play) ( mp, &amp;amp;ex);&lt;br /&gt;
&lt;br /&gt;
+	return true ;&lt;br /&gt;
+}&lt;br /&gt;
+&lt;br /&gt;
+void vlc_shut()&lt;br /&gt;
+{&lt;br /&gt;
+	if (mp)&lt;br /&gt;
+		libvlc_media_player_release( mp );&lt;br /&gt;
+	mp = NULL ;&lt;br /&gt;
+	if ( inst )&lt;br /&gt;
+		libvlc_release( inst ); &lt;br /&gt;
+	inst = NULL ;&lt;br /&gt;
+}&lt;br /&gt;
+&lt;br /&gt;
+bool vlc_stop()&lt;br /&gt;
+{&lt;br /&gt;
+	wxASSERT( mp );&lt;br /&gt;
+    libvlc_exception_t ex ;&lt;br /&gt;
+&lt;br /&gt;
+    libvlc_exception_init (&amp;amp;ex);&lt;br /&gt;
+    libvlc_media_player_stop ( mp, &amp;amp;ex);&lt;br /&gt;
&lt;br /&gt;
+    raisee ( &amp;amp;ex, _T(&amp;quot;media player stop&amp;quot;));&lt;br /&gt;
+&lt;br /&gt;
+	return true ;&lt;br /&gt;
+}&lt;br /&gt;
+&lt;br /&gt;
+	&lt;br /&gt;
+bool vlc_play()&lt;br /&gt;
+{&lt;br /&gt;
+	wxASSERT( mp );&lt;br /&gt;
+    libvlc_exception_t ex ;&lt;br /&gt;
+    libvlc_exception_init (&amp;amp;ex);&lt;br /&gt;
+   libvlc_media_player_play ( mp, &amp;amp;ex);&lt;br /&gt;
&lt;br /&gt;
+   raisee ( &amp;amp;ex, _T(&amp;quot;media player play&amp;quot;));&lt;br /&gt;
+&lt;br /&gt;
+	return true ;&lt;br /&gt;
+}&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+bool vlc_bind( wxWindow* output )&lt;br /&gt;
&lt;br /&gt;
+{&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+   /* if (!libvlc.IsLoaded()) {&lt;br /&gt;
&lt;br /&gt;
+        wxLogError( _T(&amp;quot;error: link lib&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
+        return false;&lt;br /&gt;
&lt;br /&gt;
+    }*/&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+     const char * const vlc_args[] = {&lt;br /&gt;
&lt;br /&gt;
+              &amp;quot;-I&amp;quot;, &amp;quot;dummy&amp;quot;, // Don&#039;t use any interface&lt;br /&gt;
&lt;br /&gt;
+              //&amp;quot;--no-dummy-quiet&amp;quot;, // do not use a dos box&lt;br /&gt;
&lt;br /&gt;
+              //&amp;quot;--module-path=/set/your/path/to/libvlc/module/if/you/are/on/windows/or/macosx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
+              };&lt;br /&gt;
&lt;br /&gt;
+    libvlc_exception_t ex ;&lt;br /&gt;
+    //libvlc_instance_t * inst;&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
+    //libvlc_media_player_t *mp;&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    libvlc_exception_init (&amp;amp;ex);&lt;br /&gt;
&lt;br /&gt;
+    //(*pfnlibvlc_exception_init) (&amp;amp;ex);&lt;br /&gt;
&lt;br /&gt;
+    /* init vlc modules, should be done only once */&lt;br /&gt;
&lt;br /&gt;
+    //inst = (*pfnlibvlc_new) (sizeof(vlc_args) / sizeof(vlc_args[0]), vlc_args, &amp;amp;ex);&lt;br /&gt;
&lt;br /&gt;
+    inst = libvlc_new (sizeof(vlc_args) / sizeof(vlc_args[0]), vlc_args, &amp;amp;ex);&lt;br /&gt;
&lt;br /&gt;
+    raisee (&amp;amp;ex);&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    /* Create a media player playing environement */&lt;br /&gt;
&lt;br /&gt;
+    //mp = (*pfnlibvlc_media_player_new_from_media) (m, &amp;amp;ex);&lt;br /&gt;
&lt;br /&gt;
+    mp = libvlc_media_player_new (inst, &amp;amp;ex);&lt;br /&gt;
&lt;br /&gt;
+    raisee (&amp;amp;ex,_T(&amp;quot;media player new&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    /** TRICKY ** DIRTY ** NASTY ** HACK&lt;br /&gt;
+      * Get a window&#039;s drawable surface. Low level handle::&lt;br /&gt;
+      * MSW::HWND / GTK::XID / MAC::&lt;br /&gt;
+      * Taken from wxVTK AND **GSTREAMER** Implemtation for wxWidgets&lt;br /&gt;
+      */&lt;br /&gt;
&lt;br /&gt;
+	#if defined(__WXGTK__)&lt;br /&gt;
+		if(!GTK_WIDGET_REALIZED(output-&amp;gt;m_wxwindow)) {&lt;br /&gt;
+		    /** MOST TRICKY**&lt;br /&gt;
+		      * If the GtkWidget is not drawn on the screen yet it is not assigned an XID&lt;br /&gt;
+		      */&lt;br /&gt;
+		    //Not realized yet - set to connect at realization time&lt;br /&gt;
+		    g_signal_connect (output-&amp;gt;m_wxwindow,&lt;br /&gt;
+		                          &amp;quot;realize&amp;quot;,&lt;br /&gt;
+		                          G_CALLBACK (GtkWindowRealized),&lt;br /&gt;
+		                          mp);&lt;br /&gt;
+		    wxLogDebug(_T(&amp;quot;VLCBackend::Init GTK window Pizza for Gtkwidget %x not yet alive. Hooking a callback&amp;quot;), output-&amp;gt;m_wxwindow );&lt;br /&gt;
+			/*&lt;br /&gt;
+			wxLogError ( _T(&amp;quot; ERROR: GTK windows Pizza for Gtkwidget not yet alive... Not hooking a Callback. Make sure the window is shown on the screen... Exiting...&amp;quot;));&lt;br /&gt;
+			return false ;&lt;br /&gt;
+			*/&lt;br /&gt;
+		}&lt;br /&gt;
+		else&lt;br /&gt;
+	#endif&lt;br /&gt;
+	#if defined (__WXGTK__) || defined (__WXX11__)&lt;br /&gt;
+		    HookVideoWindow( mp, GetXWindow(output) ) ;&lt;br /&gt;
+	#else&lt;br /&gt;
+		HookVideoWindow( mp, output-&amp;gt;GetHandle() ) ;&lt;br /&gt;
+	#endif&lt;br /&gt;
+&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    //Sleep (10); /* Let it play a bit */&lt;br /&gt;
&lt;br /&gt;
+    //wxMilliSleep ( 20*1000);&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    /* Stop playing */&lt;br /&gt;
&lt;br /&gt;
+    //(*pfnlibvlc_media_player_stop) (mp, &amp;amp;ex);&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    /* Free the media_player */&lt;br /&gt;
&lt;br /&gt;
+    //(*pfnlibvlc_media_player_release) (mp);&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    //(*pfnlibvlc_destroy) (inst);&lt;br /&gt;
&lt;br /&gt;
+    //raisee (&amp;amp;ex);&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    return true;&lt;br /&gt;
&lt;br /&gt;
+}&lt;br /&gt;
+&lt;br /&gt;
+/*&lt;br /&gt;
&lt;br /&gt;
+wxDynamicLibrary libvlc(_T(&amp;quot;libvlc&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
+wxDynamicLibrary libvlccore(_T(&amp;quot;libvlccore&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    typedef int (*ex_raised_t)(libvlc_exception_t *);&lt;br /&gt;
&lt;br /&gt;
+    wxDYNLIB_FUNCTION ( ex_raised_t, libvlc_exception_raised, libvlc );&lt;br /&gt;
&lt;br /&gt;
+    typedef char* (*ex_message_t)(libvlc_exception_t *);&lt;br /&gt;
&lt;br /&gt;
+    wxDYNLIB_FUNCTION ( ex_message_t , libvlc_exception_get_message , libvlc);&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    typedef void (*ex_init_t)(libvlc_exception_t*);&lt;br /&gt;
&lt;br /&gt;
+    wxDYNLIB_FUNCTION ( ex_init_t, libvlc_exception_init, libvlc );&lt;br /&gt;
&lt;br /&gt;
+    typedef  libvlc_instance_t * (*lib_new_t)(int,char* const *,libvlc_exception_t*);&lt;br /&gt;
&lt;br /&gt;
+    wxDYNLIB_FUNCTION ( lib_new_t, libvlc_new, libvlc );&lt;br /&gt;
&lt;br /&gt;
+    //typedef int (*play_add_t)( libvlc_instance_t *, const char *, const char *, libvlc_exception_t * );&lt;br /&gt;
&lt;br /&gt;
+    //wxDYNLIB_FUNCTION ( play_add_t, libvlc_playlist_add ,libvlc);&lt;br /&gt;
&lt;br /&gt;
+    //typedef void (*play_play_t)( libvlc_instance_t*, int, int, char **,libvlc_exception_t * );&lt;br /&gt;
&lt;br /&gt;
+    //wxDYNLIB_FUNCTION ( play_play_t, libvlc_playlist_play, libvlc);&lt;br /&gt;
&lt;br /&gt;
+    //typedef void (*vid_set_t)( libvlc_instance_t *, libvlc_drawable_t, libvlc_exception_t * );&lt;br /&gt;
&lt;br /&gt;
+    //wxDYNLIB_FUNCTION ( vid_set_t, libvlc_video_set_parent, libvlc);&lt;br /&gt;
&lt;br /&gt;
+    typedef int (*drawable_t)  ( libvlc_media_player_t *, libvlc_drawable_t, libvlc_exception_t * );&lt;br /&gt;
&lt;br /&gt;
+    wxDYNLIB_FUNCTION (drawable_t, libvlc_media_player_set_drawable, libvlc);&lt;br /&gt;
&lt;br /&gt;
+    typedef int (*lib_dest_t)(libvlc_instance_t*);&lt;br /&gt;
&lt;br /&gt;
+    wxDYNLIB_FUNCTION ( lib_dest_t, libvlc_destroy ,libvlc);&lt;br /&gt;
&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
+    typedef libvlc_media_t* (*media_new_t)(libvlc_instance_t*, const char* , libvlc_exception_t*);&lt;br /&gt;
&lt;br /&gt;
+    wxDYNLIB_FUNCTION ( media_new_t, libvlc_media_new, libvlc);&lt;br /&gt;
&lt;br /&gt;
+    typedef void (*media_release_t)(libvlc_media_t*);&lt;br /&gt;
&lt;br /&gt;
+    wxDYNLIB_FUNCTION (media_release_t, libvlc_media_release, libvlc);&lt;br /&gt;
&lt;br /&gt;
+    typedef void (*mplay_play_t)(libvlc_media_player_t*, libvlc_exception_t*);&lt;br /&gt;
&lt;br /&gt;
+    wxDYNLIB_FUNCTION (mplay_play_t, libvlc_media_player_play, libvlc);&lt;br /&gt;
&lt;br /&gt;
+    typedef libvlc_media_player_t* (*mplayer_med_t)(libvlc_media_t*, libvlc_exception_t*);&lt;br /&gt;
&lt;br /&gt;
+    wxDYNLIB_FUNCTION (mplayer_med_t, libvlc_media_player_new_from_media, libvlc);&lt;br /&gt;
&lt;br /&gt;
+    typedef void (*mplayer_stop_t)(libvlc_media_player_t*, libvlc_exception_t*);&lt;br /&gt;
&lt;br /&gt;
+    wxDYNLIB_FUNCTION (mplayer_stop_t, libvlc_media_player_stop, libvlc);&lt;br /&gt;
&lt;br /&gt;
+*/&lt;br /&gt;
+&lt;br /&gt;
+#endif&lt;br /&gt;
&lt;br /&gt;
diff -Nur wxvlc_test-0.1/vlc_bind.h wxvlc_test/vlc_bind.h&lt;br /&gt;
--- wxvlc_test-0.1/vlc_bind.h	1970-01-01 02:00:00.000000000 +0200&lt;br /&gt;
+++ wxvlc_test/vlc_bind.h	2008-10-28 11:53:02.000000000 +0200&lt;br /&gt;
@@ -0,0 +1,18 @@&lt;br /&gt;
+/* mini library for libvlc integration into wxWidgets apps &lt;br /&gt;
+	part of the wxVLCMediaBackend v2...  &lt;br /&gt;
+    this code is left to the &amp;quot;public&amp;quot;	 &lt;br /&gt;
+	basos    2008    &amp;lt; noxelia 4t gmail c0m &amp;gt;&lt;br /&gt;
+*/&lt;br /&gt;
+&lt;br /&gt;
+#include &amp;lt;wx/string.h&amp;gt;&lt;br /&gt;
+#include &amp;lt;wx/window.h&amp;gt;&lt;br /&gt;
+&lt;br /&gt;
+//prototype for vlc test func &lt;br /&gt;
&lt;br /&gt;
+bool vlc_load(wxString media );&lt;br /&gt;
+bool vlc_play() ;&lt;br /&gt;
+bool vlc_bind(wxWindow*) ;&lt;br /&gt;
+void vlc_shut() ;&lt;br /&gt;
+bool vlc_stop() ;&lt;br /&gt;
+&lt;br /&gt;
+&lt;br /&gt;
+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Munich</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SoC_2008/Enhance_PVR_capabilities_of_VLC&amp;diff=14560</id>
		<title>SoC 2008/Enhance PVR capabilities of VLC</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SoC_2008/Enhance_PVR_capabilities_of_VLC&amp;diff=14560"/>
		<updated>2009-07-31T18:09:22Z</updated>

		<summary type="html">&lt;p&gt;Munich: /* Intro */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoCProject|year=2008|student=[[User:Dylan|Dylan Yudaken]]|mentor=[[User:Pdherbemont|Pierre d&#039;Herbemont]]}}&lt;br /&gt;
&lt;br /&gt;
==Intro==&lt;br /&gt;
This is the page I will use to document the progress of my Summer of Code 2008 project. Feel free to send me ideas, comments or any inspiration.then u eat shit and crap it back out again&lt;br /&gt;
&lt;br /&gt;
==Project Abstract==&lt;br /&gt;
VLC has fast become one of the most common video players available for &#039;non-technical&#039; users. The ability to watch streams easily and efficiently is a huge advantage for VLC. The ability to timeshift streams has been added to the latest unstable builds, however it is vastly underfeatured and not nearly ready for release. The features would enhance VLC to a new level which would allow a new set of users to use it.&lt;br /&gt;
&lt;br /&gt;
I propose to extend &amp;amp; improve the PVR capabilities of VLC. The current version is severely lacking in functionality and performance. There is a very basic timeshift capability already. To this I will add the ability to randomly seek through the buffer (fast forward, rewind, etc ). The ability to save buffers and continue recording to the new file will be added. These recordings will be in any chosen format. These features will help anyone who uses VLC to watch TV shows to easily turn their client into a MythTV/Media Centre style client.  &lt;br /&gt;
I will tie the module in with the user interface properly so that the state of the buffer and the current position can be easily seen. &lt;br /&gt;
I then plan to begin work on a framework that combines all of these features into a simple interface easily accessible with a remote control. The interface will combine VLM and the media library into a single easily accesible place. The interface will have the ability to &#039;talk&#039; to the server sending commands such as changing tv channel or switching input source.&lt;br /&gt;
&lt;br /&gt;
With this and the completion of VLM and the playlist managing system VLC will have the capabilities to become a fully featured PVR system with the massive advantage of it being run off a streaming server if need be.&lt;br /&gt;
==Current Status==&lt;br /&gt;
End of Week 8&lt;br /&gt;
&lt;br /&gt;
[http://git.videolan.org/?p=vlc-dylanza.git&amp;amp;a=search&amp;amp;h=intmodst=author&amp;amp;s=Dylan Latest patches]&lt;br /&gt;
&lt;br /&gt;
===Timeshift===&lt;br /&gt;
* Mostly Done - Testing Phase!&lt;br /&gt;
&lt;br /&gt;
===Interface===&lt;br /&gt;
* Now we have a full on menu system (see screenshots).&lt;br /&gt;
* Can control most VLC things from the system.&lt;br /&gt;
* It could(should?) work if you pull it off the git repository. hit F5 during movie play and a menu should slide into view with some functionality.&lt;br /&gt;
Command line vlc --vout=pvrvout -I pvrgui &amp;lt;file&amp;gt;&lt;br /&gt;
* Now is time to make it all functional and nice. Beginning with the text.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Current Problems===&lt;br /&gt;
* Image drawing STILL isnt working. I hate this bug. (loading works I think).&lt;br /&gt;
* When the movie is paused the thread priority drops and the animations dont work well anymore.&lt;br /&gt;
* Major problem with closing GLX. Traced to an nvidia driver problem. I have found a work around thought, so that will be an option. Hopefully they fix the drivers one day.&lt;br /&gt;
* got to remove FTGL&lt;br /&gt;
&lt;br /&gt;
=== Screenshots ===&lt;br /&gt;
==== End Week 8 ====&lt;br /&gt;
http://git.videolan.org/?p=vlc-dylanza.git;a=blob_plain;h=1899e7ba751c70853c7bce1dfbd771a396d6c34a;f=modules/gui/pvr/pvrvout/screens/1.png&lt;br /&gt;
* Base Menu&lt;br /&gt;
http://git.videolan.org/?p=vlc-dylanza.git;a=blob_plain;h=ac55fac905819f02f1cb44a94700cb20b7232107;f=modules/gui/pvr/pvrvout/screens/2.png&lt;br /&gt;
* Playlist modifications&lt;br /&gt;
http://git.videolan.org/?p=vlc-dylanza.git;a=blob_plain;h=e767ff186de5b2a48bbb7cdfb077420bfc982a05;f=modules/gui/pvr/pvrvout/screens/3.png&lt;br /&gt;
* Modifying an number variable&lt;br /&gt;
&lt;br /&gt;
==Details==&lt;br /&gt;
The plan is to work on two parts. &lt;br /&gt;
===Timeshift Module===&lt;br /&gt;
Initially the timeshift access module will be improved considerably. Bugs ironed out and additional functionality added. This is beign done a bit at a time throughout.&lt;br /&gt;
===PVR Interface===&lt;br /&gt;
Then a new interface will be added. My current idea (still to be discussed with more knowledgable developers) is to build onto the QT interface. &lt;br /&gt;
Firstly a good fullscreen interface (potentially to be worked on with the summer of code project focusing on that) that clearly displays the current buffer state. ie. where we are in the current buffer, buffer size, recording information etc...&lt;br /&gt;
In addition a new widget will be created that contains the PVR-style menus. These will be nice and big for use on a tv. There will be screens to access music &amp;amp; videos (from the library still to be finished), streams, options, pictures &amp;amp; VLM. There will potentially also be a new sort of hotkeys interface specifically for the PVR, so that you can have specific hotkeys linked to a remote control when watching fullscreen.&lt;br /&gt;
&lt;br /&gt;
==Project Timeline==&lt;br /&gt;
===Time Planning===&lt;br /&gt;
Basically&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pre-May 26&#039;&#039;&#039; Because of my excellent southern-hemisphere timetable have started working on code a bit. see status for progress.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;May 26:&#039;&#039;&#039; Program Start. Also the start of my exams. Will not be working this week.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;June 1 -&amp;gt; 13:&#039;&#039;&#039; Still have exams, but only 2 in this long period and its not very busy with them. Will start working properly on the project.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;June 14 - July 7:&#039;&#039;&#039; Work Work&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; July 7:&#039;&#039;&#039; Mid term evaluations&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; July 8 -&amp;gt; Beginning of August:&#039;&#039;&#039; Work nice and hard.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beginning of August -&amp;gt; August 11:&#039;&#039;&#039; Finish off. could have tests here as well depending on university. 11 August is googles suggested pencils down date.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;August 11 -&amp;gt; August 18:&#039;&#039;&#039; Make code excellent. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;August 19:&#039;&#039;&#039; no more coding&lt;br /&gt;
&lt;br /&gt;
===Timeline===&lt;br /&gt;
This will be expanded upon, specifically the PVR Interface section will be much more detailed closer to the time, when a specific plan is developed.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Task Description !! Date Finished (or planned Finish)!! Status&lt;br /&gt;
|-&lt;br /&gt;
|Planning || 26 May || style=&amp;quot;background: #00ff00&amp;quot;|done (so to speak)&lt;br /&gt;
|-&lt;br /&gt;
|PVR On screen display||16 - 23 June || style=&amp;quot;background: #ffffdd&amp;quot;|Busy...&lt;br /&gt;
|-&lt;br /&gt;
|Timeshift Module||?|| Not Started&lt;br /&gt;
|-&lt;br /&gt;
|PVR Interface ||  11 August || Not Started&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Munich</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Documentation:Modules/http_intf&amp;diff=10339</id>
		<title>Documentation:Modules/http intf</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Documentation:Modules/http_intf&amp;diff=10339"/>
		<updated>2007-12-27T17:35:10Z</updated>

		<summary type="html">&lt;p&gt;Munich: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Module|name=http|type=Control interface|description=Allows control of VLC over a http connection}}&lt;br /&gt;
It is possible to [[Control VLC via a browser]] via an extra interface which can be enabled by going to Settings &amp;gt; Add Interface &amp;gt; Web Interface.&lt;br /&gt;
&lt;br /&gt;
To use this interface as the primary interface, launch VLC with the parameter &amp;quot;-I http&amp;quot; or set http to be the primary interface via the preferences (in versions .8+ you go to Preferences &amp;gt; Interface &amp;gt; General &amp;gt; Interface module: http remote control interface. To launch it as a secondary interface you should launch VLC with the parameter &amp;quot;--extraintf=http&amp;quot; or set http as an extra-interface in the Preferences area mentioned above.&lt;br /&gt;
&lt;br /&gt;
Now when you start VLC, a web interface will be created on port 8080. The options --http-addr and --http-port can be used to specify an IP and the port on which you want to run the interface.&lt;br /&gt;
&lt;br /&gt;
It is now also possible to customize the Web interface. See the html pages in share/html (within the VLC directory for Windows, within the VLC.app package on Mac OS X and somewhere in /usr/local for Linux). This can be a very cool interface if you spent some time developing nice UI elements. If you would like to contribute a new &#039;Default&#039; html interface, you are also very welcome (keep it small).&lt;br /&gt;
&lt;br /&gt;
An additional theme has been created (by Lucas Steigmeyer a.k.a. Plezops) specifically for PDA&#039;s or PSP&#039;s in mind. This additonal theme has a grey theme and will fit nicely on most portable versions of web browsers. The theme has the layout reordered to fit the screen better. You may download this theme from [http://www.orrentdesign.com/outsideResources/VLC_Graphite.zip OrrentDesign.com]. A readme file is included. View for install instructions and other info.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note:&#039;&#039; On versions of VLC (windows) that are greater than .8 (possibly previous versions, though not confirmed) the HTTP interface index file is stored in the &amp;quot;http&amp;quot; folder in the VLC folder. There are no help files bundled with the download however you may find help files in the online Wiki and how-to, or readme&#039;s.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note:&#039;&#039; A new http interface is available since 0.8.5. However this new interface does not work on handhelp PDA&#039;s running the Windows Mobile OS, it also does not work with javascript turned off in your browser. If you want to use the old interface, use &amp;lt;nowiki&amp;gt;http://&amp;lt;ip&amp;gt;:&amp;lt;port&amp;gt;/old/&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For more information about the HTTP interface, see the document &amp;quot;VLC Play-Howto&amp;quot;, the paragraph [http://videolan.org/doc/play-howto/en/ch04.html#id295619&amp;quot;The HTTP interface&amp;quot;] in chapter 4 (&amp;quot;Advanced use of VLC&amp;quot;) and appendix B [http://videolan.org/doc/play-howto/en/apb.html&amp;quot;Building pages for the HTTP interface&amp;quot;]. See also [[Documentation:Play_HowTo/Building_Pages_for_the_HTTP_Interface|the updated version of that appendix on the wiki]].&lt;br /&gt;
&lt;br /&gt;
===Related topic===&lt;br /&gt;
[[Documentation:Play_HowTo/Building_Pages_for_the_HTTP_Interface|Building Pages for the HTTP Interface]]&lt;br /&gt;
&lt;br /&gt;
[[Interfaces]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Interfaces]]&lt;/div&gt;</summary>
		<author><name>Munich</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Talk:Windows_Media&amp;diff=7609</id>
		<title>Talk:Windows Media</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Talk:Windows_Media&amp;diff=7609"/>
		<updated>2007-02-15T20:46:05Z</updated>

		<summary type="html">&lt;p&gt;Munich: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What about WMV2?&lt;/div&gt;</summary>
		<author><name>Munich</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Talk:WebsiteDesign&amp;diff=4984</id>
		<title>Talk:WebsiteDesign</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Talk:WebsiteDesign&amp;diff=4984"/>
		<updated>2006-06-30T15:13:15Z</updated>

		<summary type="html">&lt;p&gt;Munich: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Multiple Designs? ==&lt;br /&gt;
&lt;br /&gt;
An idea: Since you can have multiple CSS, why not have, say, three winners? That way visitors can have 3 design to choose from by switching the stylesheet. It also makes it easier for the jury to choose the winner-s. ;)&lt;/div&gt;</summary>
		<author><name>Munich</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Windows_Media&amp;diff=3365</id>
		<title>Windows Media</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Windows_Media&amp;diff=3365"/>
		<updated>2006-01-30T14:31:41Z</updated>

		<summary type="html">&lt;p&gt;Munich: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Windows Media Video (WMV) is a generic name for the set of proprietary streaming video technologies developed by Microsoft. It is part of the Windows Media framework.&lt;br /&gt;
&lt;br /&gt;
WMV is not built solely on Microsoft in-house technology. From version 7 (WMV1), Microsoft has used its own non-standard version of MPEG-4 Part 2. The video stream is often combined with an audio stream of Windows Media Audio.&lt;br /&gt;
&lt;br /&gt;
WMV files are played by players such as MPlayer or Windows Media Player, the latter being only available for Microsoft Windows and Macintosh systems. Many third-party players exist for various platforms such as Linux that use the FFmpeg implementation of the WMV codecs.&lt;br /&gt;
&lt;br /&gt;
Raw WMV video is packed into an AVI or Advanced Streaming Format (ASF) container. The resulting files may be named .avi if it is an AVI-contained file, or .wmv or .asf if it is an ASF file, but .wmv files are to be ASF files with audio/video content only.&lt;br /&gt;
&lt;br /&gt;
WMV is found in the AVI file container when encoded with Microsoft&#039;s proprietory Windows Media Video 9 VCM software for Windows. Microsoft&#039;s Windows Media Player for the Mac does not support all WMV encoded files since it supports only the ASF file container.&lt;br /&gt;
&lt;br /&gt;
WMV includes digital rights management facilities intended to protect intellectual property rights.&lt;br /&gt;
&lt;br /&gt;
Microsoft has submitted Version 9 codec to the Society of Motion Picture and Television Engineers (SMPTE), for approval as an international standard. (As of Jan 2005, the SMPTE is reviewing the submission under the draft-name &amp;quot;VC-1&amp;quot;). This codec is also used to distribute high definition video on standard DVDs in a format Microsoft has branded as WMV HD. This WMV HD content can be played back on computers or compatible DVD players.&lt;br /&gt;
&lt;br /&gt;
The Trial version of standards were published by SMPTE in September 2005. A reference decoder implementation and test sequences are also available.&lt;/div&gt;</summary>
		<author><name>Munich</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=MacOS&amp;diff=276</id>
		<title>MacOS</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=MacOS&amp;diff=276"/>
		<updated>2005-05-27T11:24:37Z</updated>

		<summary type="html">&lt;p&gt;Munich: /* Problems Running Some &amp;quot;.mpg&amp;quot; or &amp;quot;.mpeg&amp;quot; Files */ MPlayer codec support are different between OS platforms&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;VLC&#039;s Mac OS X interface&#039;&#039;&#039; is designed quite similar to the interfaces of other ports. At present, almost all features available in the WxWindows-interface can be used in the Mac OS X one as well. Only an &#039;&#039;advanced interface&#039;&#039; does not exist at the moment, but will probably be added later on. Skins aren&#039;t supported in this port too. That&#039;s hopefully going to change after the 0.8.2 release.&lt;br /&gt;
&lt;br /&gt;
==Keyboard Shortcuts==&lt;br /&gt;
You can find most of the keyboard shortcuts by taking a look at the menus. Additional hotkeys are defined in the section &amp;quot;Hotkeys&amp;quot; of your VLC preferences.&lt;br /&gt;
&lt;br /&gt;
Some handy key combo&#039;s are:&lt;br /&gt;
&lt;br /&gt;
* You can use the spacebar to start/pause the video.&lt;br /&gt;
* When in fullscreen you can use the escape key to exit the fullscreen state&lt;br /&gt;
* When you are watching a DVD and the video window is the frontmost window you can use the arrow keys and the enter key to navigate the DVD menus. &lt;br /&gt;
&lt;br /&gt;
==Problems Running Some MPEG and AVI Files==&lt;br /&gt;
Occasionally you will come across a file that gives the following error in VLC:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;no suitable decoder module for fourcc `undf&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;VLC probably does not support this sound or video format.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Users may find that movies giving this error may play the video track only. This error can appear because VLC 0.8.1 does not yet support the &amp;quot;Voxware Metasound&amp;quot; audio codec. If you look at the error log, and find &amp;quot;Voxware Metasound&amp;quot; in one of the error lines, then the video you are trying to play has this problem.&lt;br /&gt;
&lt;br /&gt;
It appears that, as of February 2005, if a Mac user also wants to play the sound track of such a movie, Windows Media Player 7.1 needs to be used, which means running classic. Later versions (at least WMP 9) removed support for all formats and codecs that are not Windows Media, which included removal of AVI and MPEG support.&lt;br /&gt;
&lt;br /&gt;
Neither VLC, Windows Media Player 9, MPlayer, nor aparrently any other movie player for the Mac supports the &amp;quot;Voxware Metasound&amp;quot; codec on Mac OS X.&lt;br /&gt;
&lt;br /&gt;
==Related topic==&lt;br /&gt;
* [[FAQ on MacOSX only issues]]&lt;br /&gt;
* [[ZSH Autocompletion]]&lt;/div&gt;</summary>
		<author><name>Munich</name></author>
	</entry>
</feed>