Difference between revisions of "WxVLCBackend"

From VideoLAN Wiki
Jump to navigation Jump to search
(Initial title letter made lowercase)
Line 1: Line 1:
 +
{{Lowercase}}
 
== Intro ==   
 
== Intro ==   
 
Although vlc is moving [[Qt_and_GTK|away]] from wxwidgets this is an attemp to move wxwidgets towards vlc (libvlc to be more precise)..
 
Although vlc is moving [[Qt_and_GTK|away]] from wxwidgets this is an attemp to move wxwidgets towards vlc (libvlc to be more precise)..

Revision as of 20:17, 3 November 2008

Intro

Although vlc is moving away from wxwidgets this is an attemp to move wxwidgets towards vlc (libvlc to be more precise).. The libvlc API is fairly new and VERY promissing.. It exports ALL the functionality of vlc into a nice c API . On the other hand wxWidgets is a very rich [1] ( and also community based ) growing X platform library. It covers the 3 basic platforms (MSW, LINUX, MAC) and more[2]..

wxVLCBacend

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,...). wxVLCBackend maybe integrated in the official wxwidgets code.. 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.

Right now (29/10/08) The code is not mature enough for publication. There are some stability issues. To correct them i've created a mini (Poc) wxWidgets based app to isolate these issues, wxvlc_test.

wxvlc_test

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 crashes when starting playing ( somewhere inside libavcodec library with no other dubuging symbols ) *some* avis.. On the other hand vlc plays these same files smoothly.

      • Tests were done on vlc-0.9.5

My intentions for this publication are : a) to test the glue code on other systems ( my tests are on linux ONLY so dont ask me, but windows could be tested too ) b) to check the glue code correctness by a vlc internalls well-knower (maybe i miss something, cause i cant explain that libavcodec crashes)

Information for wxvlc_test is provided in the README as well

Temporary::

The packed tar.gz is provided uder base64 here ....... Paste it in a new file (e.g. wxvlc.b64) and decode it (like $base64 -d wxvlc.b64 > wxvlc.tar.gz ).


CUT START------------------------------------------------

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


CUT END------------------------------------------------