2019.03.24 Modify Stop procedure

           inspired by Rob Renaud <jgrenaud74@gmail.com>

           modified procedure:
            
                procedure Stop(const stopTimeOut : Cardinal = 1000);
				
2018.09.18 Fix Play declaration for compatible with D4

2018.07.13 Fix resize bug under FPC 1.8.x

           reported by Mukataï Mukatai <mukatai@msn.com>

           affected procedures:

                procedure WMEraseBkgnd(var msg: ...); message ...;

2018.07.01 Add support for media callbacks

           inspired by Mark Adamson <markadamson83@gmail.com>

           new procedure:
            
                procedure Play(stm : TStream, ...); overload;

2018.06.29 Remove duplicated code

           affected procedures:
            
                procedure Play       (...); overload;
                procedure PlayNormal (...); overload;
                procedure PlayYoutube(...); overload;

2018.06.25 Fix copy paste bug

           reported by bnop90 <bnop90@mail.ru>

           affected procedures:

                procedure Play(mrl: WideString; mediaOptions : array of WideString; ...); overload;

2018.06.11 Extend parameters:

           inspired by Wortmann Sándor <wortmann@visualsolutions.hu>

           affected procedures:

                procedure TPasLibVlcMediaList.Add(mrl : WideString; mediaOptions : array of WideString);

2018.06.05 Correct PlayYoutube

           reported by Ahmet Yeşilçimen <yesilcimenahmet@gmail.com>

2018.04.26 Correct version comment

2018.03.11 Update for better compatibility with libvlc 3.0.0

           New events:

               libvlc_MediaPlayerESAdded,
               libvlc_MediaPlayerESDeleted,
               libvlc_MediaPlayerESSelected,
               libvlc_MediaPlayerAudioDevice,
               libvlc_MediaPlayerChapterChanged,
               libvlc_RendererDiscovererItemAdded,
               libvlc_RendererDiscovererItemDeleted,

2018.01.02 Extend parameters:

           inspired by "Christian Koch" <ch.koch.ed@online.de>
           required to add ":cdda-track=1" as option to the media

           affected procedures:

                procedure Play       (mrl: WideString; mediaOptions : array of WideString; ...); overload;
                procedure PlayNormal (mrl: WideString; mediaOptions : array of WideString; ...); overload;
                procedure PlayYoutube(mrl: WideString; mediaOptions : array of WideString; ...); overload;

2017.12.05 New functions:

           GetVideoSampleAspectRatio

2017.04.11 Correct media list event handler WillAddItem

           reported by "Adolfo Ramirez" <arogemail@gmail.com>

               OnItemAdded => OnWillAddItem

2016.11.28 Update Equalizer function declarations for compile with BC6.

           reported by "Woldemar Unknown" <djvk@mail.ru>

2016.10.18 Updated for compile under Lazarus 1.6.0 + FPC 3.0.0.

2016.10.08 Cleanup and add support for adjust video:

    procedure SetVideoAdjustEnable(value : Boolean);
    procedure SetVideoAdjustContrast(value : Single);
    procedure SetVideoAdjustBrightness(value : Single);
    procedure SetVideoAdjustHue(value : Single);
    procedure SetVideoAdjustSaturation(value : Single);
    procedure SetVideoAdjustGamma(value : Single);

    function  GetVideoAdjustEnable(): Boolean;
    function  GetVideoAdjustContrast() : Single;
    function  GetVideoAdjustBrightness() : Single;
    function  GetVideoAdjustHue():Single;
    function  GetVideoAdjustSaturation():Single;
    function  GetVideoAdjustGamma():Single;

2016.10.04 Update for better compatibility with libvlc 2.2.4

           New functions:

               GetAudioFilterList(): TStringList;
               GetVideoFilterList(): TStringList;

2016.05.08 Update for allow change audio output

           New functions:

               GetAudioOutputList
               GetAudioOutputDeviceList
               GetAudioOutputDeviceEnum
               SetAudioOutput
               SetAudioOutputDevice
               SetAudioOutputDevice

            Changed functions:

               Play
               PlayNormal
               PlayYoutube

           New properties:

               LastAudioOutput
               LastAudioOutputDeviceId

2016.02.12 Update for better compatibility with libvlc 2.2.2

           New events:

               libvlc_MediaPlayerCorked
               libvlc_MediaPlayerUncorked,
               libvlc_MediaPlayerMuted,
               libvlc_MediaPlayerUnmuted,
               libvlc_MediaPlayerAudioVolume

2015.02.28 Updated for better support version 2.2.0

           New functions:

               EqualizerGetPresetList(): TStringList;
               EqualizerGetBandCount(): Word;
               EqualizerGetBandFrequency(bandIndex : Word): Single;

               EqualizerCreate(APreset : Word = $FFFF) : TPasLibVlcEqualizer;
               EqualizerApply(AEqualizer : TPasLibVlcEqualizer);
               EqualizerSetPreset(APreset : Word = $FFFF);

               GetAudioOutputDeviceEnumList(): TStringList;
               SetAudioOutputDevice(aOut: WideString; device_id: WideString);
               SetAudioOutputDevice(device_id: WideString);

           New events:

               libvlc_MediaPlayerVout
               libvlc_MediaPlayerScrambledChanged

           fix function SetAudioMute

           reported by "Moisés Ribeiro" <moisesrms@gmail.com>

2015.02.01 New property:

               MouseEventsHandler

               inspired by: Beat Schlösser <beat.schloesser@softron.ch>

           New functions:

               GetAudioOutputList(): TStringList;
               GetAudioOutputDeviceList(aOut : WideString): TStringList;

               inspired by: Tom Wideroe <tom.wideroe@gmail.com>

               GetVideoDimension(var width, height: LongWord): Boolean;

               GetVideoChapterCountByTitleId(const title_id : Integer): Integer;

               GetVideoSubtitleList(): TStringList;
               GetVideoSubtitleCount(): Integer;
               GetVideoSubtitleCountByTitleId(const title_id : Integer): Integer;
               GetVideoSubtitleId(): Integer;
               SetVideoSubtitleById(const subtitle_id : Integer);
               GetVideoSubtitleNo(): Integer;
               SetVideoSubtitleByNo(subtitle_no : Integer);
               GetVideoSubtitleDescriptionById(const subtitle_id : Integer): WideString;
               GetVideoSubtitleDescriptionByNo(subtitle_no : Integer): WideString;
               SetVideoSubtitleFile(filename : WideString);

               GetVideoTitleList() : TStringList;
               GetVideoTitleCount(): Integer;
               GetVideoTitleId():Integer;
               SetVideoTitleById(const title_id:Integer);
               GetVideoTitleNo(): Integer;
               SetVideoTitleByNo(title_no : Integer);
               GetVideoTitleDescriptionById(const track_id : Integer): WideString;
               GetVideoTitleDescriptionByNo(title_no : Integer): WideString;

               inspired by: Sebastián Mayorá <s.mayora@gmail.com>

            Rename functions:

               GetAspectRatio() to GetVideoAspectRatio()
               SetAspectRatio() to SetVideoAspectRatio()

               GetChannel() to GetAudioChannel()
               SetChannel() to SetAudioChannel()

2015.01.31 New functions:

           GetAudioOutputList(): TStringList;
           GetAudioOutputDeviceList(aOut : WideString): TStringList;

           inspired by: Tom Widerøe <tom.wideroe@gmail.com>

2015.01.06 New property

           MouseEventsHandler

           inspired by: Beat Schlösser <beat.schloesser@softron.ch>

           New function:

           GetVideoDimension(var width, height: LongWord): Boolean;

2014.07.12 Add new functions:

           GetVideoChapterCountByTitleId(const title_id : Integer): Integer;

           GetVideoSubtitleList(): TStringList;
           GetVideoSubtitleCount(): Integer;
           GetVideoSubtitleCountByTitleId(const title_id : Integer): Integer;
           GetVideoSubtitleId(): Integer;
           SetVideoSubtitleById(const subtitle_id : Integer);
           GetVideoSubtitleNo(): Integer;
           SetVideoSubtitleByNo(subtitle_no : Integer);
           GetVideoSubtitleDescriptionById(const subtitle_id : Integer): WideString;
           GetVideoSubtitleDescriptionByNo(subtitle_no : Integer): WideString;
           SetVideoSubtitleFile(filename : WideString);

           GetVideoTitleList() : TStringList;
           GetVideoTitleCount(): Integer;
           GetVideoTitleId():Integer;
           SetVideoTitleById(const title_id:Integer);
           GetVideoTitleNo(): Integer;
           SetVideoTitleByNo(title_no : Integer);
           GetVideoTitleDescriptionById(const track_id : Integer): WideString;
           GetVideoTitleDescriptionByNo(title_no : Integer): WideString;

           inspired by: Sebastián Mayorá <s.mayora@gmail.com>

           rename functions:

           GetAspectRatio() to GetVideoAspectRatio()
           SetAspectRatio() to SetVideoAspectRatio()

           GetChannel() to GetAudioChannel()
           SetChannel() to SetAudioChannel()

2014.06.28 Add new functions:

           MarqueeShowText();
           MarqueeHide();

           MarqueeSetText(marquee_text : WideString);
           MarqueeSetPosition(position_x, position_y : Integer); overload;
           MarqueeSetPosition(position : libvlc_position_t); overload;
           MarqueeSetColor(color : libvlc_video_marquee_color_t);
           MarqueeSetFontSize(font_size: Integer);
           MarqueeSetOpacity(opacity: libvlc_opacity_t);
           MarqueeSetTimeOut(time_out_ms: Integer);
           MarqueeSetRefresh(refresh_after_ms: Integer);
           MarqueeSetEnable(enable : Integer);

           LogoShowFile();
           LogoShowFiles();
           LogoHide();

           LogoSetFile();
           LogoSetFiles();
           LogoSetPosition();
           LogoSetOpacity();
           LogoSetDelay();
           LogoSetRepeat();
           LogoSetEnable();

           GetAudioTrackList();
           GetAudioTrackId();
           SetAudioTrackById();
           SetAudioTrackByNo();
           GetAudioTrackDescriptionByNo();
           GetAudioTrackDescriptionById();

           Remove functions:

           SetAudioTrack();
           GetAudioTrackDescription();

           Add new deinterlace filters:

           dmPHOSPHOR, dmIVTC

           inspired by Chris <dhwz@gulli.com>

           Improve to play normal and youtube streams

           Play();

2013.12.11 Add new functions:

           IsPause()
           GetMediaMrl();
           GetStateName();

           writed by John Brookman <j.a.brookman@hotmail.co.uk>

           Add better support for Delphi XE2 and up

           Add 64 bit demo compiled with Delphi XE2
           this demo request 64 bit  VideoLAN

           requested by John Brookman <j.a.brookman@hotmail.co.uk>

           Repair small bug in function TPasLibVlcPlayer.GetVideoHeight(): LongInt;
           return wideo width not height

           Reported by: "Dr Christoph Camphausen" <ckc@unsw.edu.au>

           Rewrite OnMediaChanged event handler
           Now report current media MRL

           Requested by: "Eduan Slabbert" <wizardno.7@gmail.com>

           Check compatibility with version 2.1.2

2013.11.23 New properties

           AudioOutput
           VideoOutput

2013.10.20 Verify compatibility with libvlc 2.1.0

           Add local UTF8Encode and UTF8Decode for Delphi 3, 4, 5

           Requested by: "Johan Keizer" <j.keizer36@upcmail.nl>

2013.08.25 Add support for FPC LCL QT4 and FPC LCL GTK2 (LINUX, WIN)

           Test on Kubuntu and Windows XP SP2 + VLC 2.0.8

2013.08.18 Fix incorrect position of MouseEventWinCtrl if Player
           placed inside TPanel control aligned to right side of form.

           Request by: wilber27@users.sourceforge.net

2013.04.26 Improve events handling

           Add new properties:

           OsdShow default true
           SpuShow default true
           SnapshotPrv default false

           Add conditional code compilation for support Delphi 7
           Thanks to: 1024317@qq.com

2013.01.31 Rewrite events handling

2012.10.28 Add compiler options {$A4,Z4} or {A+,Z+} for Delphi < 6
           Add property TPasLibVlcPlayer.StartOptions
           Now each player component use own instance of libvlc.

2012.07.27 new property TPasLibVlcPlayer.UseEvents default FALSE
           fix bug in TPasLibVlcPlayer.function EventsEnable:
           if (p_mi = NIL) then -> if (p_mi <> NIL) then
           add function TPasLibVlcPlayer.Stop
           add try..finally in TPasLibVlcPlayer.Destroy

2012.07.20 Add critical section to improve calls from event handlers

2011.08.22 Crossplatform modifications (Linux)

           Request by: "Maloupi" <maloupi@2n-tech.com>

2011.08.20 add new functions:

           function  GetChannel(): Integer;
           function  GetAudioDelay(): Int64;

           procedure SetChannel(chanel: Integer);
           procedure SetAudioDelay(delay: Int64);

2011.08.20 add new functions:

           function  GetAudioTrackCount(): Integer;
           function  GetAudioTrackDescription(track: Integer): String;
           function  GetAudioTrack(): Integer;
           procedure SetAudioTrack(track: Integer);

           Request by: Mark Schneider <dhwz@gmx.net>

2011.08.20 add new feature: load vlc.dll from custom path

           VLC.Path := YOUR CUSTOM PATH

           Requested by: "Mark Schneider" <dhwz@users.sourceforge.net>

2011.08.19 add properties to deinterlace filter

           Requested by: "Mark Schneider" <dhwz@users.sourceforge.net

2011.04.07 add new component: TPasLibVlcMediaList

           Methods for change play list mode:

           PlayerSetPlayModeNormal;
           PlayerSetPlayModeLoop;
           PlayerSetPlayModeRepeat;

           Methods for play, stop, pause:

           Play;
           Pause;
           Stop;
           Next;
           Prev;
           IsPlay(): Boolean;
           GetState(): TPasLibVlcPlayerState;
           PlayItem(item: libvlc_media_t_ptr);

           Methods for operate on play list:

           Add(mrl: WideString);
           Get(index: Integer);
           Count(): Integer;
           Delete(index: Integer);
           Insert(index: Integer; mrl: WideString);
           GetItemAtIndex(index: Integer): libvlc_media_t_ptr;
           IndexOfItem(item: libvlc_media_t_ptr): Integer;

           After execute any method application will be notified about it via events:

           OnItemAdded - after LIBVLC add item to play list
           OnWillAddItem - before LIBVLC add item to play list
           OnItemDeleted - after LIBVLC del item from play list
           OnWillDeleteItem - before LIBVLC del item from play list
           OnPlayed - after player start play
           OnStopped - after player stop
           OnNextItemSet - afer player play next item

           Requested by: Christian cf. Fillion <christian@rhesus.net>

2011.04.06 add new functions:

           SetPlayRate() - change current play rate
           GetPlayRate() - return current play rate

           playRate = 100 - play with normal speed
           playRate = 200 - play with speed x 2
           playRate =  50 - play with slow speed is 0.5

           Requested by: Johann Mitterhauser <>

2011.02.11 make compatibile with Lazarus

           Requested by: Christian cf. Fillion <christian@rhesus.net>

2011.02.08 simple help for play YouTube video links

           Now Play function detect YouTube link, and play it correctly.

           Requested by: Christian cf. Fillion <christian@rhesus.net>

2011.01.05 add new functions:

           GetVideoLenStr() - return video length as time string
           GetVideoPosStr() - return video position as time string

           Requested by: Edijs van Kole de McSnikovics <terminedijs@yahoo.com>

2011.01.05 add new properties: PopupMenu, etc.

           Requested by: Edijs van Kole de McSnikovics <terminedijs@yahoo.com>

2011.01.04 correct creation of VCL at runtime, error: control '' has no parent window

           This error will be found by: Edijs van Kole de McSnikovics <terminedijs@yahoo.com>

2011.01.03 rename variable: FHideTitle to FShowTitle

           if ShowTitle = TRUE  then SHOW title at begin of play
           if ShowTitle = FALSE then HIDE title at begin of play

           default value: FALSE

2010.12.08 Add support for version 1.1.5, new properties:

           HideTitle - if TRUE prevent display title at begin of play, default TRUE
           UseEvents - if TRUE then enable event propagation, default FALSE

2010.10.01 Add support for unicode file names

2010.07.22 Add support for set/get Audio Volume Level

2010.09.02 Add support for version 1.1.4

2010.07.14 Change PChar to PAnsiChar

           Requested by: David Nottage, davidnottage@gmail.com
