summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGraeme Geldenhuys <graemeg@gmail.com>2013-04-30 00:19:34 +0100
committerGraeme Geldenhuys <graemeg@gmail.com>2013-04-30 00:19:34 +0100
commitd856075f5f21a76266d47675a76aa4b762fd51aa (patch)
tree384902f83707bec0ea28817b65d4bd256004d939
parent1ef066af3f4fbfb339264c6095a318564dfee0b9 (diff)
downloadfpGUI-d856075f5f21a76266d47675a76aa4b762fd51aa.tar.xz
Adds VLC video library header translation and Media Player component.
These are optional 3rd party components, because they will add extra dependencies to your project. For that reason, they are not part of the fpgui_toolkit package as standard.
-rw-r--r--examples/gui/video_vlc/frmvlcplayer.pas340
-rw-r--r--examples/gui/video_vlc/testfpguivlc.lpi99
-rw-r--r--examples/gui/video_vlc/testfpguivlc.lpr31
-rw-r--r--src/3rdparty/README.txt5
-rw-r--r--src/3rdparty/libvlc/README.txt11
-rw-r--r--src/3rdparty/libvlc/fpg_vlc.pas81
-rw-r--r--src/3rdparty/libvlc/libvlc.pas1156
-rw-r--r--src/3rdparty/libvlc/vlc.pas1746
8 files changed, 3469 insertions, 0 deletions
diff --git a/examples/gui/video_vlc/frmvlcplayer.pas b/examples/gui/video_vlc/frmvlcplayer.pas
new file mode 100644
index 00000000..7b44c1e1
--- /dev/null
+++ b/examples/gui/video_vlc/frmvlcplayer.pas
@@ -0,0 +1,340 @@
+unit frmvlcplayer;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ SysUtils, Classes, fpg_base, fpg_panel, fpg_button, fpg_main, fpg_form,
+ fpg_editbtn, fpg_memo, fpg_label, libvlc, vlc, fpg_vlc;
+
+type
+
+ { TVLCPlayerDemoForm }
+
+ TVLCPlayerDemoForm = class(TfpgForm)
+ private
+ {@VFD_HEAD_BEGIN: VLCPlayerDemo}
+ Panel1: TfpgPanel;
+ FilenameEdit1: TfpgFileNameEdit;
+ Label1: TfpgLabel;
+ Button1: TfpgButton;
+ Button2: TfpgButton;
+ Button3: TfpgButton;
+ Button4: TfpgButton;
+ Memo1: TfpgMemo;
+ procedure Sync;
+ {@VFD_HEAD_END: VLCPlayerDemo}
+ public
+ P : TFpgVLCPlayer;
+ FMsg: String;
+ procedure AfterCreate; override;
+ Procedure InitPlayer;
+ Procedure Log(Const Msg : String);
+ Procedure DoPlay(sender : TObject);
+ Procedure DoPause(sender : TObject);
+ Procedure DoResume(sender : TObject);
+ Procedure DoStop(sender : TObject);
+ // Event callbacks
+ procedure DoOnBackward(Sender: TObject);
+ procedure DoOnMediaChanged(Sender: TObject);
+ procedure DoOnNothingSpecial(Sender: TObject);
+ procedure DoOnBuffering(Sender: TObject);
+ procedure DoOnEOF(Sender: TObject);
+ procedure DoOnError(Sender: TObject; const AError: string);
+ procedure DoOnForward(Sender: TObject);
+ procedure DoOnLengthChanged(Sender: TObject; const time: TDateTime);
+ procedure DoOnOpening(Sender: TObject);
+ procedure DoOnPause(Sender: TObject);
+ procedure DoOnPlaying(Sender: TObject);
+ procedure DoOnStop(Sender: TObject);
+ procedure DoOnPausableChanged(Sender: TObject; const AValue: Boolean);
+ procedure DoOnPositionChanged(Sender: TObject; const APos: Double);
+ procedure DoOnSeekableChanged(Sender: TObject; const AValue: Boolean);
+ procedure DoOnTimeChanged(Sender: TObject; const time: TDateTime);
+ procedure DoOnSnapshot(Sender: TObject; const AfileName: string);
+ procedure DoOnTitleChanged(Sender: TObject; const ATitle: Integer);
+ end;
+
+{@VFD_NEWFORM_DECL}
+
+implementation
+
+{@VFD_NEWFORM_IMPL}
+
+procedure TVLCPlayerDemoForm.DoOnBackward(Sender: TObject);
+begin
+ Log('Backward');
+end;
+
+procedure TVLCPlayerDemoForm.DoOnMediaChanged(Sender: TObject);
+begin
+ Log('Media changed');
+end;
+
+procedure TVLCPlayerDemoForm.DoOnNothingSpecial(Sender: TObject);
+begin
+ Log('Idle');
+end;
+
+procedure TVLCPlayerDemoForm.DoOnBuffering(Sender: TObject);
+begin
+ Log('Buffering');
+end;
+
+procedure TVLCPlayerDemoForm.DoOnEOF(Sender: TObject);
+begin
+ Log('EOF');
+end;
+
+procedure TVLCPlayerDemoForm.DoOnError(Sender: TObject; const AError: string);
+begin
+ Log('Error : '+AError);
+end;
+
+procedure TVLCPlayerDemoForm.DoOnForward(Sender: TObject);
+begin
+ Log('Forward');
+end;
+
+procedure TVLCPlayerDemoForm.DoOnLengthChanged(Sender: TObject;
+ const time: TDateTime);
+begin
+ Log('Length changed : '+TimeToStr(Time));
+end;
+
+procedure TVLCPlayerDemoForm.DoOnOpening(Sender: TObject);
+begin
+ Log('Opening');
+end;
+
+procedure TVLCPlayerDemoForm.DoOnPause(Sender: TObject);
+begin
+ Log('Pause');
+end;
+
+procedure TVLCPlayerDemoForm.DoOnPlaying(Sender: TObject);
+begin
+ Log('Playing');
+end;
+
+procedure TVLCPlayerDemoForm.DoOnStop(Sender: TObject);
+begin
+ Log('Stop');
+end;
+
+procedure TVLCPlayerDemoForm.DoOnPausableChanged(Sender: TObject;
+ const AValue: Boolean);
+begin
+ Log('Pausable changed : '+BoolToStr(AValue,True));
+end;
+
+procedure TVLCPlayerDemoForm.DoOnPositionChanged(Sender: TObject;
+ const APos: Double);
+begin
+ Log('Position changed : '+FloatToStr(APos));
+end;
+
+procedure TVLCPlayerDemoForm.DoOnSeekableChanged(Sender: TObject;
+ const AValue: Boolean);
+begin
+ Log('Seekable changed : '+BoolToStr(AValue,True));
+end;
+
+procedure TVLCPlayerDemoForm.DoOnTimeChanged(Sender: TObject;
+ const time: TDateTime);
+begin
+ Log('Time changed : '+TimeToStr(Time));
+end;
+
+procedure TVLCPlayerDemoForm.DoOnSnapshot(Sender: TObject;
+ const AfileName: string);
+begin
+ Log('Wrote snapshot to file : '+AFileName);
+end;
+
+procedure TVLCPlayerDemoForm.DoOnTitleChanged(Sender: TObject;
+ const ATitle: Integer);
+begin
+ Log('Title changed : '+IntToStr(ATitle));
+end;
+
+procedure TVLCPlayerDemoForm.AfterCreate;
+begin
+
+ {@VFD_BODY_BEGIN: VLCPlayerDemo}
+ Name := 'VLCPlayerDemo';
+ SetPosition(424, 319, 813, 574);
+ WindowTitle := 'VLCPlayerDemo';
+ Hint := '';
+
+ Panel1 := TfpgPanel.Create(self);
+ with Panel1 do
+ begin
+ Name := 'Panel1';
+ SetPosition(28, 40, 754, 422);
+ Anchors := [anLeft,anRight,anTop,anBottom];
+ FontDesc := '#Label1';
+ Hint := '';
+ Text := 'Select a video';
+ end;
+
+ FilenameEdit1 := TfpgFileNameEdit.Create(self);
+ with FilenameEdit1 do
+ begin
+ Name := 'FilenameEdit1';
+ SetPosition(108, 8, 566, 24);
+ Anchors := [anLeft,anRight,anTop];
+ ExtraHint := '';
+ FileName := '';
+ Filter := 'Video files|*.avi;*.flv;*.mp4';
+ InitialDir := '';
+ TabOrder := 2;
+ end;
+
+ Label1 := TfpgLabel.Create(self);
+ with Label1 do
+ begin
+ Name := 'Label1';
+ SetPosition(32, 12, 72, 20);
+ FontDesc := '#Label1';
+ Hint := '';
+ Text := 'Play file:';
+ end;
+
+ Button1 := TfpgButton.Create(self);
+ with Button1 do
+ begin
+ Name := 'Button1';
+ SetPosition(698, 8, 80, 24);
+ Anchors := [anRight,anTop];
+ Text := 'Play';
+ FontDesc := '#Label1';
+ Hint := '';
+ ImageName := '';
+ TabOrder := 4;
+ OnClick:=@DoPlay;
+ end;
+
+ Button2 := TfpgButton.Create(self);
+ with Button2 do
+ begin
+ Name := 'Button2';
+ SetPosition(28, 472, 80, 28);
+ Anchors := [anLeft,anBottom];
+ Text := 'Pause';
+ FontDesc := '#Label1';
+ Hint := '';
+ ImageName := '';
+ TabOrder := 5;
+ OnClick:=@DoPause;
+ end;
+
+ Button3 := TfpgButton.Create(self);
+ with Button3 do
+ begin
+ Name := 'Button3';
+ SetPosition(116, 472, 80, 28);
+ Anchors := [anLeft,anBottom];
+ Text := 'Resume';
+ FontDesc := '#Label1';
+ Hint := '';
+ ImageName := '';
+ TabOrder := 6;
+ OnClick:=@DoResume;
+ end;
+
+ Button4 := TfpgButton.Create(self);
+ with Button4 do
+ begin
+ Name := 'Button4';
+ SetPosition(204, 472, 80, 28);
+ Anchors := [anLeft,anBottom];
+ Text := 'Stop';
+ FontDesc := '#Label1';
+ Hint := '';
+ ImageName := '';
+ TabOrder := 7;
+ OnClick:=@DoStop;
+ end;
+
+ Memo1 := TfpgMemo.Create(self);
+ with Memo1 do
+ begin
+ Name := 'Memo1';
+ SetPosition(288, 469, 494, 100);
+ Anchors := [anLeft,anRight,anBottom];
+ FontDesc := '#Edit1';
+ Hint := '';
+ TabOrder := 8;
+ end;
+
+ {@VFD_BODY_END: VLCPlayerDemo}
+ {%endregion}
+end;
+
+procedure TVLCPlayerDemoForm.InitPlayer;
+begin
+ If P<>Nil then
+ exit;
+ P:=TFpgVLCPlayer.Create(Self);
+ P.UseEvents:=True;
+ P.ParentWindow:=Panel1;
+ P.OnMediaChanged:=@DoOnMediaChanged;
+ P.OnNothingSpecial:=@DoOnNothingSpecial;
+ P.OnBackward:=@DoOnBackward;
+ P.OnBuffering:=@DoOnBuffering;
+ P.OnEOF:=@DoOnEOF;
+ P.OnError:=@DoOnError;
+ P.OnForward:=@DoOnForward;
+ P.OnOpening:=@DoOnOpening;
+ P.OnPause:=@DoOnPause;
+ P.OnPlaying:=@DoOnPlaying;
+ P.OnStop:=@DoOnStop;
+ P.OnLengthChanged:=@DoOnLengthChanged;
+ P.OnTimeChanged:=@DoOnTimeChanged;
+ P.OnPausableChanged:=@DoOnPausableChanged;
+ P.OnPositionChanged:=@DoOnPositionChanged;
+ P.OnSeekableChanged:=@DoOnSeekableChanged;
+ P.OnTitleChanged:=@DoOnTitleChanged;
+ P.OnSnapshot:=@DoOnSnapshot;
+
+end;
+
+procedure TVLCPlayerDemoForm.Sync;
+begin
+ Memo1.Lines.Add(FMsg);
+end;
+
+procedure TVLCPlayerDemoForm.Log(const Msg: String);
+begin
+ FMsg:=Msg;
+ TThread.Synchronize(Nil,@Self.Sync);
+end;
+
+procedure TVLCPlayerDemoForm.DoPlay(sender: TObject);
+begin
+ InitPlayer;
+ P.PlayFile(FileNameEdit1.FileName);
+end;
+
+procedure TVLCPlayerDemoForm.DoPause(sender: TObject);
+begin
+ If Assigned(P) then
+ P.Pause;
+end;
+
+procedure TVLCPlayerDemoForm.DoResume(sender: TObject);
+begin
+ if Assigned(P) then
+ P.Resume;
+end;
+
+procedure TVLCPlayerDemoForm.DoStop(sender: TObject);
+begin
+ If Assigned(P) then
+ P.Stop;
+end;
+
+
+end.
diff --git a/examples/gui/video_vlc/testfpguivlc.lpi b/examples/gui/video_vlc/testfpguivlc.lpi
new file mode 100644
index 00000000..fc6715f3
--- /dev/null
+++ b/examples/gui/video_vlc/testfpguivlc.lpi
@@ -0,0 +1,99 @@
+<?xml version="1.0"?>
+<CONFIG>
+ <ProjectOptions>
+ <Version Value="9"/>
+ <General>
+ <Flags>
+ <MainUnitHasCreateFormStatements Value="False"/>
+ <MainUnitHasTitleStatement Value="False"/>
+ </Flags>
+ <SessionStorage Value="InProjectDir"/>
+ <MainUnit Value="0"/>
+ <Title Value="testfpguivlc"/>
+ <UseAppBundle Value="False"/>
+ <ResourceType Value="res"/>
+ </General>
+ <i18n>
+ <EnableI18N LFM="False"/>
+ </i18n>
+ <VersionInfo>
+ <StringTable ProductVersion=""/>
+ </VersionInfo>
+ <BuildModes Count="1">
+ <Item1 Name="Default" Default="True"/>
+ </BuildModes>
+ <PublishOptions>
+ <Version Value="2"/>
+ <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+ <ExcludeFileFilter Value="*.(bak|ppu|o|so);*~;backup"/>
+ </PublishOptions>
+ <RunParams>
+ <local>
+ <FormatVersion Value="1"/>
+ <LaunchingApplication PathPlusParams="/usr/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
+ </local>
+ </RunParams>
+ <RequiredPackages Count="1">
+ <Item1>
+ <PackageName Value="fpgui_toolkit"/>
+ </Item1>
+ </RequiredPackages>
+ <Units Count="5">
+ <Unit0>
+ <Filename Value="testfpguivlc.lpr"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="testfpguivlc"/>
+ </Unit0>
+ <Unit1>
+ <Filename Value="frmvlcplayer.pas"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="frmvlcplayer"/>
+ </Unit1>
+ <Unit2>
+ <Filename Value="../fpg_vlc.pas"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="fpg_vlc"/>
+ </Unit2>
+ <Unit3>
+ <Filename Value="../../libvlc/libvlc.pp"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="libvlc"/>
+ </Unit3>
+ <Unit4>
+ <Filename Value="../../libvlc/vlc.pas"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="vlc"/>
+ </Unit4>
+ </Units>
+ </ProjectOptions>
+ <CompilerOptions>
+ <Version Value="11"/>
+ <Target>
+ <Filename Value="testfpguivlc"/>
+ </Target>
+ <SearchPaths>
+ <IncludeFiles Value="$(ProjOutDir)"/>
+ <OtherUnitFiles Value="../../../src/3rdparty/libvlc"/>
+ <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
+ </SearchPaths>
+ <Other>
+ <CompilerMessages>
+ <MsgFileName Value=""/>
+ </CompilerMessages>
+ <CompilerPath Value="$(CompPath)"/>
+ </Other>
+ </CompilerOptions>
+ <Debugging>
+ <Exceptions Count="3">
+ <Item1>
+ <Name Value="EAbort"/>
+ </Item1>
+ <Item2>
+ <Name Value="ECodetoolError"/>
+ </Item2>
+ <Item3>
+ <Name Value="EFOpenError"/>
+ </Item3>
+ </Exceptions>
+ </Debugging>
+</CONFIG>
diff --git a/examples/gui/video_vlc/testfpguivlc.lpr b/examples/gui/video_vlc/testfpguivlc.lpr
new file mode 100644
index 00000000..3846a69c
--- /dev/null
+++ b/examples/gui/video_vlc/testfpguivlc.lpr
@@ -0,0 +1,31 @@
+program testfpguivlc;
+
+{$mode objfpc}{$H+}
+
+uses
+ {$IFDEF UNIX}
+ cthreads,
+ {$ENDIF}
+ Math,
+ Classes, frmvlcplayer, fpg_vlc, libvlc, vlc, fpg_main;
+
+procedure MainProc;
+var
+ frm: TVLCPlayerDemoForm;
+begin
+ fpgApplication.Initialize;
+ frm := TVLCPlayerDemoForm.Create(nil);
+ frm.Show;
+ fpgApplication.Run;
+ frm.Free;
+end;
+
+
+begin
+ With TThread.Create(False) do
+ Terminate;
+ setexceptionmask([exInvalidOp, exDenormalized, exZeroDivide,
+ exOverflow, exUnderflow, exPrecision]);
+ MainProc;
+end.
+
diff --git a/src/3rdparty/README.txt b/src/3rdparty/README.txt
new file mode 100644
index 00000000..406a8a6c
--- /dev/null
+++ b/src/3rdparty/README.txt
@@ -0,0 +1,5 @@
+The code found here is optional extras. When using them, they will add
+extra dependencies to your project, but that is a choice for you to
+make.
+
+For further details please see the README file in each sub-directory. \ No newline at end of file
diff --git a/src/3rdparty/libvlc/README.txt b/src/3rdparty/libvlc/README.txt
new file mode 100644
index 00000000..0b1f1147
--- /dev/null
+++ b/src/3rdparty/libvlc/README.txt
@@ -0,0 +1,11 @@
+
+VLC Library 2.x
+
+This directory contains header translations of the VLC library v2.x, as well
+as unit containing a non-gui Media Player class. There is also a fpGUI Media
+Player descendant class added, which allows you to embed the video output
+inside a fpGUI widget.
+
+This code was commissioned by Master Maths [http://www.mastermaths.co.za]
+(my employer), and kindly donated to the Free Pascal and fpGUI Toolkit
+projects.
diff --git a/src/3rdparty/libvlc/fpg_vlc.pas b/src/3rdparty/libvlc/fpg_vlc.pas
new file mode 100644
index 00000000..0eb8daba
--- /dev/null
+++ b/src/3rdparty/libvlc/fpg_vlc.pas
@@ -0,0 +1,81 @@
+unit fpg_vlc;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, libvlc, vlc, fpg_main;
+
+Type
+
+ { TFpgVLCPlayer }
+
+ TFpgVLCPlayer = Class(TVLCMediaPlayer)
+ private
+ FParentWindow: TfpgWindow;
+ procedure SetParentWindowControl(AValue: TfpgWindow);
+ Protected
+ Procedure SetParentWindow; override;
+ Procedure SetParentWindowSize(AWidth,AHeight : Cardinal); override;
+ procedure Notification(AComponent: TComponent; Operation: TOperation); override;
+ Published
+ Property ParentWindow : TfpgWindow Read FParentWindow Write SetParentWindowControl;
+ end;
+
+implementation
+
+{ TFpgVLCPlayer }
+
+procedure TFpgVLCPlayer.SetParentWindowControl(AValue: TfpgWindow);
+begin
+ if FParentWindow=AValue then Exit;
+ If Assigned(FParentWindow) then
+ FParentWindow.RemoveFreeNotification(Self);
+ FParentWindow:=AValue;
+ If Assigned(FParentWindow) then
+ FParentWindow.FreeNotification(Self);
+end;
+
+procedure TFpgVLCPlayer.SetParentWindow;
+
+begin
+ if Assigned(ParentWindow) then
+ begin
+ {$IFDEF UNIX}
+ libvlc_media_player_set_xwindow(Instance, ParentWindow.WinHandle);
+ {$ENDIF}
+ {$IFDEF MSWINDOWS}
+ libvlc_media_player_set_hwnd(Instance, Pointer(ParentWindow.WinHandle));
+ {$ENDIF}
+ end
+ else if HaveInstance then
+ begin
+ {$IFDEF UNIX}
+ libvlc_media_player_set_xwindow(Instance, 0);
+ {$ENDIF}
+ {$IFDEF MSWINDOWS}
+ libvlc_media_player_set_hwnd(Instance, Nil);
+ {$ENDIF}
+ end
+end;
+
+procedure TFpgVLCPlayer.SetParentWindowSize(AWidth, AHeight: Cardinal);
+begin
+ If Assigned(ParentWindow) then
+ begin
+ ParentWindow.Width:=AWidth;
+ ParentWindow.Height:=AHeight;
+ end;
+end;
+
+procedure TFpgVLCPlayer.Notification(AComponent: TComponent;
+ Operation: TOperation);
+begin
+ Inherited;
+ if (Operation=opRemove) and (AComponent=FParentWindow) then
+ FParentWindow:=Nil;
+end;
+
+end.
+
diff --git a/src/3rdparty/libvlc/libvlc.pas b/src/3rdparty/libvlc/libvlc.pas
new file mode 100644
index 00000000..cfdc1e52
--- /dev/null
+++ b/src/3rdparty/libvlc/libvlc.pas
@@ -0,0 +1,1156 @@
+
+{$mode objfpc}
+unit libvlc;
+interface
+
+uses
+ ctypes;
+
+{$IFDEF FPC}
+{$PACKRECORDS C}
+{$ENDIF}
+
+Const
+
+{$ifdef unix}
+ libname = 'libvlc.so';
+{$else}
+{$ifdef windows}
+ DefaultlibPath = 'C:\Program files\Videolan\VLC\';
+ corelibname = 'libvlccore.dll';
+ libname = 'libvlc.dll';
+{$endif}
+{$endif}
+
+ Type
+ _bool = cint;
+ Ppcchar = ^Pcchar;
+
+ // Opaque types.
+ libvlc_event_manager_t = record end;
+ Libvlc_instance_t = record end;
+ Libvlc_log_iterator_t = record end;
+ Libvlc_log_t = record end;
+ Libvlc_media_discoverer_t = record end;
+ Libvlc_media_library_t = record end;
+ Libvlc_media_list_player_t = record end;
+ Libvlc_media_list_t = record end;
+ Libvlc_media_player_t = record end;
+ Libvlc_media_t = record end;
+
+ Plibvlc_audio_output_t = ^libvlc_audio_output_t;
+ Plibvlc_event_manager_t = ^libvlc_event_manager_t;
+ Plibvlc_event_t = ^libvlc_event_t;
+ Plibvlc_instance_t = ^libvlc_instance_t;
+ Plibvlc_log_iterator_t = ^libvlc_log_iterator_t;
+ Plibvlc_log_message_t = ^libvlc_log_message_t;
+ Plibvlc_log_t = ^libvlc_log_t;
+ Plibvlc_media_discoverer_t = ^libvlc_media_discoverer_t;
+ Plibvlc_media_library_t = ^libvlc_media_library_t;
+ Plibvlc_media_list_player_t = ^libvlc_media_list_player_t;
+ Plibvlc_media_list_t = ^libvlc_media_list_t;
+ Plibvlc_media_player_t = ^libvlc_media_player_t;
+ Plibvlc_media_stats_t = ^libvlc_media_stats_t;
+ Plibvlc_media_t = ^libvlc_media_t;
+ Plibvlc_media_track_info_t = ^libvlc_media_track_info_t;
+ Plibvlc_module_description_t = ^libvlc_module_description_t;
+ Plibvlc_track_description_t = ^libvlc_track_description_t;
+
+ int8_t = cschar;
+ int16_t = csint;
+ int32_t = cint;
+ int64_t = clong;
+ uint8_t = cuchar;
+ uint16_t = csint;
+ uint32_t = cuint;
+ uint64_t = culong;
+ int_least8_t = cschar;
+ int_least16_t = csint;
+ int_least32_t = cint;
+ int_least64_t = clong;
+ uint_least8_t = cuchar;
+ uint_least16_t = csint;
+ uint_least32_t = cuint;
+ uint_least64_t = culong;
+ int_fast8_t = cschar;
+ int_fast16_t = clong;
+ int_fast32_t = clong;
+ int_fast64_t = clong;
+ uint_fast8_t = cuchar;
+ uint_fast16_t = culong;
+ uint_fast32_t = culong;
+ uint_fast64_t = culong;
+ intptr_t = clong;
+ uintptr_t = culong;
+ intmax_t = clong;
+ uintmax_t = culong;
+
+ libvlc_time_t = int64_t;
+ libvlc_log_message_t = record
+ i_severity : cint;
+ psz_type : ^cchar;
+ psz_name : ^cchar;
+ psz_header : ^cchar;
+ psz_message : ^cchar;
+ end;
+
+ libvlc_event_type_t = cint;
+ libvlc_callback_t = procedure (_para1:Plibvlc_event_t; _para2:pointer);cdecl;
+
+ libvlc_module_description_t = record
+ psz_name : ^cchar;
+ psz_shortname : ^cchar;
+ psz_longname : ^cchar;
+ psz_help : ^cchar;
+ p_next : ^libvlc_module_description_t;
+ end;
+
+{
+static inline int64_t libvlc_delay(int64_t pts)
+
+ return pts - libvlc_clock();
+
+ }
+
+
+ libvlc_meta_t = (libvlc_meta_Title,libvlc_meta_Artist,
+ libvlc_meta_Genre,libvlc_meta_Copyright,
+ libvlc_meta_Album,libvlc_meta_TrackNumber,
+ libvlc_meta_Description,libvlc_meta_Rating,
+ libvlc_meta_Date,libvlc_meta_Setting,
+ libvlc_meta_URL,libvlc_meta_Language,
+ libvlc_meta_NowPlaying,libvlc_meta_Publisher,
+ libvlc_meta_EncodedBy,libvlc_meta_ArtworkURL,
+ libvlc_meta_TrackID);
+
+ libvlc_state_t = (libvlc_NothingSpecial := 0,libvlc_Opening,
+ libvlc_Buffering,libvlc_Playing,libvlc_Paused,
+ libvlc_Stopped,libvlc_Ended,libvlc_Error
+ );
+
+ libvlc_media_option_t = (libvlc_media_option_trusted := $2,libvlc_media_option_unique := $100
+ );
+
+ libvlc_track_type_t = (libvlc_track_unknown := -(1),libvlc_track_audio := 0,
+ libvlc_track_video := 1,libvlc_track_text := 2
+ );
+
+ libvlc_media_stats_t = record
+ i_read_bytes : cint;
+ f_input_bitrate : cfloat;
+ i_demux_read_bytes : cint;
+ f_demux_bitrate : cfloat;
+ i_demux_corrupted : cint;
+ i_demux_discontinuity : cint;
+ i_decoded_video : cint;
+ i_decoded_audio : cint;
+ i_displayed_pictures : cint;
+ i_lost_pictures : cint;
+ i_played_abuffers : cint;
+ i_lost_abuffers : cint;
+ i_sent_packets : cint;
+ i_sent_bytes : cint;
+ f_send_bitrate : cfloat;
+ end;
+
+ libvlc_media_track_info_t = record
+ i_codec : uint32_t;
+ i_id : cint;
+ i_type : libvlc_track_type_t;
+ i_profile : cint;
+ i_level : cint;
+ u : record
+ case longint of
+ 0 : ( audio : record
+ i_channels : cunsigned;
+ i_rate : cunsigned;
+ end );
+ 1 : ( video : record
+ i_height : cunsigned;
+ i_width : cunsigned;
+ end );
+ end;
+ end;
+
+
+ libvlc_track_description_t = record
+ i_id : cint;
+ psz_name : ^cchar;
+ p_next : ^libvlc_track_description_t;
+ end;
+
+ libvlc_audio_output_t = record
+ psz_name : ^cchar;
+ psz_description : ^cchar;
+ p_next : ^libvlc_audio_output_t;
+ end;
+
+ libvlc_rectangle_t = record
+ top : cint;
+ left : cint;
+ bottom : cint;
+ right : cint;
+ end;
+
+ libvlc_video_marquee_option_t = (libvlc_marquee_Enable := 0,libvlc_marquee_Text,
+ libvlc_marquee_Color,libvlc_marquee_Opacity,
+ libvlc_marquee_Position,libvlc_marquee_Refresh,
+ libvlc_marquee_Size,libvlc_marquee_Timeout,
+ libvlc_marquee_X,libvlc_marquee_Y);
+
+ libvlc_navigate_mode_t = (libvlc_navigate_activate := 0,libvlc_navigate_up,
+ libvlc_navigate_down,libvlc_navigate_left,
+ libvlc_navigate_right);
+
+
+ libvlc_video_lock_cb = function (opaque:pointer; planes:Ppointer):pointer;cdecl;
+ libvlc_video_unlock_cb = procedure (opaque:pointer; picture:pointer; planes:Ppointer);cdecl;
+ libvlc_video_display_cb = procedure (opaque:pointer; picture:pointer);cdecl;
+ libvlc_video_format_cb = function (opaque:Ppointer; chroma:pcchar; width:pcunsigned; height:pcunsigned; pitches:pcunsigned;
+ lines:pcunsigned):cunsigned;cdecl;
+ libvlc_video_cleanup_cb = procedure (opaque:pointer);cdecl;
+ libvlc_audio_play_cb = procedure (data:pointer; samples:pointer; count:cunsigned; pts:int64_t);cdecl;
+ libvlc_audio_pause_cb = procedure (data:pointer; pts:int64_t);cdecl;
+ libvlc_audio_resume_cb = procedure (data:pointer; pts:int64_t);cdecl;
+ libvlc_audio_flush_cb = procedure (data:pointer; pts:int64_t);cdecl;
+ libvlc_audio_drain_cb = procedure (data:pointer);cdecl;
+ libvlc_audio_set_volume_cb = procedure (data:pointer; volume:cfloat; mute:_Bool);cdecl;
+ libvlc_audio_setup_cb = function (data:Ppointer; format:pcchar; rate:pcunsigned; channels:pcunsigned):cint;cdecl;
+ libvlc_audio_cleanup_cb = procedure (data:pointer);cdecl;
+ libvlc_video_logo_option_t = (libvlc_logo_enable,libvlc_logo_file,libvlc_logo_x,
+ libvlc_logo_y,libvlc_logo_delay,libvlc_logo_repeat,
+ libvlc_logo_opacity,libvlc_logo_position
+ );
+ libvlc_video_adjust_option_t = (libvlc_adjust_Enable := 0,libvlc_adjust_Contrast,
+ libvlc_adjust_Brightness,libvlc_adjust_Hue,
+ libvlc_adjust_Saturation,libvlc_adjust_Gamma
+ );
+ libvlc_audio_output_device_types_t = (libvlc_AudioOutputDevice_Error := -(1),
+ libvlc_AudioOutputDevice_Mono := 1,
+ libvlc_AudioOutputDevice_Stereo := 2,
+ libvlc_AudioOutputDevice_2F2R := 4,
+ libvlc_AudioOutputDevice_3F2R := 5,
+ libvlc_AudioOutputDevice_5_1 := 6,libvlc_AudioOutputDevice_6_1 := 7,
+ libvlc_AudioOutputDevice_7_1 := 8,libvlc_AudioOutputDevice_SPDIF := 10
+ );
+
+ libvlc_audio_output_channel_t = (libvlc_AudioChannel_Error := -(1),libvlc_AudioChannel_Stereo := 1,
+ libvlc_AudioChannel_RStereo := 2,libvlc_AudioChannel_Left := 3,
+ libvlc_AudioChannel_Right := 4,libvlc_AudioChannel_Dolbys := 5
+ );
+ libvlc_playback_mode_t = (libvlc_playback_mode_default,libvlc_playback_mode_loop,
+ libvlc_playback_mode_repeat);
+
+ libvlc_event_e = (libvlc_MediaMetaChanged := 0,
+ libvlc_MediaSubItemAdded,
+ libvlc_MediaDurationChanged,libvlc_MediaParsedChanged,
+ libvlc_MediaFreed,libvlc_MediaStateChanged,
+ libvlc_MediaPlayerMediaChanged := $100,
+ libvlc_MediaPlayerNothingSpecial,libvlc_MediaPlayerOpening,
+ libvlc_MediaPlayerBuffering,libvlc_MediaPlayerPlaying,
+ libvlc_MediaPlayerPaused,libvlc_MediaPlayerStopped,
+ libvlc_MediaPlayerForward,libvlc_MediaPlayerBackward,
+ libvlc_MediaPlayerEndReached,libvlc_MediaPlayerEncounteredError,
+ libvlc_MediaPlayerTimeChanged,libvlc_MediaPlayerPositionChanged,
+ libvlc_MediaPlayerSeekableChanged,libvlc_MediaPlayerPausableChanged,
+ libvlc_MediaPlayerTitleChanged,libvlc_MediaPlayerSnapshotTaken,
+ libvlc_MediaPlayerLengthChanged,libvlc_MediaPlayerVout,
+ libvlc_MediaListItemAdded := $200,libvlc_MediaListWillAddItem,
+ libvlc_MediaListItemDeleted,libvlc_MediaListWillDeleteItem,
+ libvlc_MediaListViewItemAdded := $300,
+ libvlc_MediaListViewWillAddItem,libvlc_MediaListViewItemDeleted,
+ libvlc_MediaListViewWillDeleteItem,libvlc_MediaListPlayerPlayed := $400,
+ libvlc_MediaListPlayerNextItemSet,libvlc_MediaListPlayerStopped,
+ libvlc_MediaDiscovererStarted := $500,
+ libvlc_MediaDiscovererEnded,libvlc_VlmMediaAdded := $600,
+ libvlc_VlmMediaRemoved,libvlc_VlmMediaChanged,
+ libvlc_VlmMediaInstanceStarted,libvlc_VlmMediaInstanceStopped,
+ libvlc_VlmMediaInstanceStatusInit,libvlc_VlmMediaInstanceStatusOpening,
+ libvlc_VlmMediaInstanceStatusPlaying,
+ libvlc_VlmMediaInstanceStatusPause,libvlc_VlmMediaInstanceStatusEnd,
+ libvlc_VlmMediaInstanceStatusError);
+
+
+ libvlc_event_t = record
+ _type : cint;
+ p_obj : pointer;
+ case longint of
+ 0 : ( media_meta_changed : record
+ meta_type : libvlc_meta_t;
+ end );
+ 1 : ( media_subitem_added : record
+ new_child : ^libvlc_media_t;
+ end );
+ 2 : ( media_duration_changed : record
+ new_duration : int64_t;
+ end );
+ 3 : ( media_parsed_changed : record
+ new_status : cint;
+ end );
+ 4 : ( media_freed : record
+ md : ^libvlc_media_t;
+ end );
+ 5 : ( media_state_changed : record
+ new_state : libvlc_state_t;
+ end );
+ 6 : ( media_player_buffering : record
+ new_cache : cfloat;
+ end );
+ 7 : ( media_player_position_changed : record
+ new_position : cfloat;
+ end );
+ 8 : ( media_player_time_changed : record
+ new_time : libvlc_time_t;
+ end );
+ 9 : ( media_player_title_changed : record
+ new_title : cint;
+ end );
+ 10 : ( media_player_seekable_changed : record
+ new_seekable : cint;
+ end );
+ 11 : ( media_player_pausable_changed : record
+ new_pausable : cint;
+ end );
+ 12 : ( media_player_vout : record
+ new_count : cint;
+ end );
+ 13 : ( media_list_item_added : record
+ item : ^libvlc_media_t;
+ index : cint;
+ end );
+ 14 : ( media_list_will_add_item : record
+ item : ^libvlc_media_t;
+ index : cint;
+ end );
+ 15 : ( media_list_item_deleted : record
+ item : ^libvlc_media_t;
+ index : cint;
+ end );
+ 16 : ( media_list_will_delete_item : record
+ item : ^libvlc_media_t;
+ index : cint;
+ end );
+ 17 : ( media_list_player_next_item_set : record
+ item : ^libvlc_media_t;
+ end );
+ 18 : ( media_player_snapshot_taken : record
+ psz_filename : ^cchar;
+ end );
+ 19 : ( media_player_length_changed : record
+ new_length : libvlc_time_t;
+ end );
+ 20 : ( vlm_media_event : record
+ psz_media_name : ^cchar;
+ psz_instance_name : ^cchar;
+ end );
+ 21 : ( media_player_media_changed : record
+ new_media : ^libvlc_media_t;
+ end );
+ end;
+
+ PPlibvlc_media_track_info_t = ^Plibvlc_media_track_info_t;
+ cbtype1 = procedure (_para1:pointer); cdecl;
+
+Var
+ libvlc_media_player_new : function(p_libvlc_instance:Plibvlc_instance_t):plibvlc_media_player_t; cdecl;
+ libvlc_media_player_new_from_media : function(p_md:Plibvlc_media_t):plibvlc_media_player_t; cdecl;
+ libvlc_media_player_release : procedure(p_mi:Plibvlc_media_player_t); cdecl;
+ libvlc_media_player_retain : procedure(p_mi:Plibvlc_media_player_t); cdecl;
+ libvlc_media_player_set_media : procedure(p_mi:Plibvlc_media_player_t; p_md:Plibvlc_media_t); cdecl;
+ libvlc_media_player_get_media : function(p_mi:Plibvlc_media_player_t):plibvlc_media_t; cdecl;
+ libvlc_media_player_event_manager : function(p_mi:Plibvlc_media_player_t):plibvlc_event_manager_t; cdecl;
+ libvlc_media_player_is_playing : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+ libvlc_media_player_play : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+ libvlc_media_player_set_pause : procedure(mp:Plibvlc_media_player_t; do_pause:cint); cdecl;
+ libvlc_media_player_pause : procedure(p_mi:Plibvlc_media_player_t); cdecl;
+ libvlc_media_player_stop : procedure(p_mi:Plibvlc_media_player_t); cdecl;
+ libvlc_media_new_location : function(p_instance:Plibvlc_instance_t; psz_mrl:pcchar):plibvlc_media_t; cdecl;
+ libvlc_media_new_path : function(p_instance:Plibvlc_instance_t; path:pcchar):plibvlc_media_t; cdecl;
+ libvlc_media_new_fd : function(p_instance:Plibvlc_instance_t; fd:cint):plibvlc_media_t; cdecl;
+ libvlc_media_new_as_node : function(p_instance:Plibvlc_instance_t; psz_name:pcchar):plibvlc_media_t; cdecl;
+ libvlc_media_add_option : procedure(p_md:Plibvlc_media_t; ppsz_options:pcchar); cdecl;
+ libvlc_media_add_option_flag : procedure(p_md:Plibvlc_media_t; ppsz_options:pcchar; i_flags:cunsigned); cdecl;
+ libvlc_media_retain : procedure(p_md:Plibvlc_media_t); cdecl;
+ libvlc_media_release : procedure(p_md:Plibvlc_media_t); cdecl;
+ libvlc_media_get_mrl : function(p_md:Plibvlc_media_t):pcchar; cdecl;
+ libvlc_media_duplicate : function(p_md:Plibvlc_media_t):plibvlc_media_t; cdecl;
+ libvlc_media_get_meta : function(p_md:Plibvlc_media_t; e_meta:libvlc_meta_t):pcchar; cdecl;
+ libvlc_media_set_meta : procedure(p_md:Plibvlc_media_t; e_meta:libvlc_meta_t; psz_value:pcchar); cdecl;
+ libvlc_media_save_meta : function(p_md:Plibvlc_media_t):cint; cdecl;
+ libvlc_media_get_state : function(p_md:Plibvlc_media_t):libvlc_state_t; cdecl;
+ libvlc_media_get_stats : function(p_md:Plibvlc_media_t; p_stats:Plibvlc_media_stats_t):cint; cdecl;
+ libvlc_media_subitems : function(p_md:Plibvlc_media_t):plibvlc_media_list_t; cdecl;
+ libvlc_media_event_manager : function(p_md:Plibvlc_media_t):plibvlc_event_manager_t; cdecl;
+ libvlc_media_get_duration : function(p_md:Plibvlc_media_t):libvlc_time_t; cdecl;
+ libvlc_media_parse : procedure(p_md:Plibvlc_media_t); cdecl;
+ libvlc_media_parse_async : procedure(p_md:Plibvlc_media_t); cdecl;
+ libvlc_media_is_parsed : function(p_md:Plibvlc_media_t):cint; cdecl;
+ libvlc_media_set_user_data : procedure(p_md:Plibvlc_media_t; p_new_user_data:pointer); cdecl;
+ libvlc_media_get_user_data : function(p_md:Plibvlc_media_t):pointer; cdecl;
+ libvlc_media_get_tracks_info : function(p_md:Plibvlc_media_t; tracks:PPlibvlc_media_track_info_t):cint; cdecl;
+ libvlc_module_description_list_release : procedure(p_list:Plibvlc_module_description_t); cdecl;
+ libvlc_audio_filter_list_get : function(p_instance:Plibvlc_instance_t):plibvlc_module_description_t; cdecl;
+ libvlc_video_filter_list_get : function(p_instance:Plibvlc_instance_t):plibvlc_module_description_t; cdecl;
+ libvlc_clock : function:int64_t; cdecl;
+
+ libvlc_errmsg : function:pcchar; cdecl;
+ libvlc_clearerr : procedure; cdecl;
+ libvlc_printerr : function(fmt:pcchar):pcchar;varargs; cdecl;
+
+ libvlc_new : function(argc:cint; argv:Ppcchar):plibvlc_instance_t; cdecl;
+ libvlc_release : procedure(p_instance:Plibvlc_instance_t); cdecl;
+ libvlc_retain : procedure(p_instance:Plibvlc_instance_t); cdecl;
+ libvlc_add_intf : function(p_instance:Plibvlc_instance_t; name:pcchar):cint; cdecl;
+ libvlc_set_exit_handler : procedure(p_instance:Plibvlc_instance_t; cb:cbtype1; opaque:pointer); cdecl;
+ libvlc_wait : procedure(p_instance:Plibvlc_instance_t); cdecl;
+ libvlc_set_user_agent : procedure(p_instance:Plibvlc_instance_t; name:pcchar; http:pcchar); cdecl;
+ libvlc_get_version : function:pcchar; cdecl;
+ libvlc_get_compiler : function:pcchar; cdecl;
+ libvlc_get_changeset : function:pcchar; cdecl;
+ libvlc_free : procedure(ptr:pointer); cdecl;
+ libvlc_event_attach : function(p_event_manager:Plibvlc_event_manager_t; i_event_type:libvlc_event_type_t; f_callback:libvlc_callback_t; user_data:pointer):cint; cdecl;
+ libvlc_event_detach : procedure(p_event_manager:Plibvlc_event_manager_t; i_event_type:libvlc_event_type_t; f_callback:libvlc_callback_t; p_user_data:pointer); cdecl;
+ libvlc_event_type_name : function(event_type:libvlc_event_type_t):pcchar; cdecl;
+ libvlc_get_log_verbosity : function(p_instance:Plibvlc_instance_t):cunsigned; cdecl;
+ libvlc_set_log_verbosity : procedure(p_instance:Plibvlc_instance_t; level:cunsigned); cdecl;
+ libvlc_log_open : function(p_instance:Plibvlc_instance_t):plibvlc_log_t; cdecl;
+ libvlc_log_close : procedure(p_log:Plibvlc_log_t); cdecl;
+ libvlc_log_count : function(p_log:Plibvlc_log_t):cunsigned; cdecl;
+ libvlc_log_clear : procedure(p_log:Plibvlc_log_t); cdecl;
+ libvlc_log_get_iterator : function(p_log:Plibvlc_log_t):plibvlc_log_iterator_t; cdecl;
+ libvlc_log_iterator_free : procedure(p_iter:Plibvlc_log_iterator_t); cdecl;
+ libvlc_log_iterator_has_next : function(p_iter:Plibvlc_log_iterator_t):cint; cdecl;
+ libvlc_log_iterator_next : function(p_iter:Plibvlc_log_iterator_t; p_buffer:Plibvlc_log_message_t):plibvlc_log_message_t; cdecl;
+ libvlc_audio_output_list_get : function(p_instance:Plibvlc_instance_t):plibvlc_audio_output_t; cdecl;
+ libvlc_audio_output_list_release : procedure(p_list:Plibvlc_audio_output_t); cdecl;
+ libvlc_audio_output_set : function(p_mi:Plibvlc_media_player_t; psz_name:pcchar):cint; cdecl;
+ libvlc_audio_output_device_count : function(p_instance:Plibvlc_instance_t; psz_audio_output:pcchar):cint; cdecl;
+ libvlc_audio_output_device_longname : function(p_instance:Plibvlc_instance_t; psz_audio_output:pcchar; i_device:cint):pcchar; cdecl;
+ libvlc_audio_output_device_id : function(p_instance:Plibvlc_instance_t; psz_audio_output:pcchar; i_device:cint):pcchar; cdecl;
+ libvlc_audio_output_device_set : procedure(p_mi:Plibvlc_media_player_t; psz_audio_output:pcchar; psz_device_id:pcchar); cdecl;
+ libvlc_audio_output_get_device_type : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+ libvlc_audio_output_set_device_type : procedure(p_mi:Plibvlc_media_player_t; device_type:cint); cdecl;
+ libvlc_audio_toggle_mute : procedure(p_mi:Plibvlc_media_player_t); cdecl;
+ libvlc_audio_get_mute : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+ libvlc_audio_set_mute : procedure(p_mi:Plibvlc_media_player_t; status:cint); cdecl;
+ libvlc_audio_get_volume : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+ libvlc_audio_set_volume : function(p_mi:Plibvlc_media_player_t; i_volume:cint):cint; cdecl;
+ libvlc_audio_get_track_count : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+ libvlc_audio_get_track_description : function(p_mi:Plibvlc_media_player_t):plibvlc_track_description_t; cdecl;
+ libvlc_audio_get_track : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+ libvlc_audio_set_track : function(p_mi:Plibvlc_media_player_t; i_track:cint):cint; cdecl;
+ libvlc_audio_get_channel : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+ libvlc_audio_set_channel : function(p_mi:Plibvlc_media_player_t; channel:cint):cint; cdecl;
+ libvlc_audio_get_delay : function(p_mi:Plibvlc_media_player_t):int64_t; cdecl;
+ libvlc_audio_set_delay : function(p_mi:Plibvlc_media_player_t; i_delay:int64_t):cint; cdecl;
+ libvlc_media_list_new : function(p_instance:Plibvlc_instance_t):plibvlc_media_list_t; cdecl;
+ libvlc_media_list_release : procedure(p_ml:Plibvlc_media_list_t); cdecl;
+ libvlc_media_list_retain : procedure(p_ml:Plibvlc_media_list_t); cdecl;
+
+ libvlc_media_list_add_file_content : function(p_ml:Plibvlc_media_list_t; psz_uri:pcchar):cint; cdecl;
+ libvlc_media_list_set_media : procedure(p_ml:Plibvlc_media_list_t; p_md:Plibvlc_media_t); cdecl;
+ libvlc_media_list_media : function(p_ml:Plibvlc_media_list_t):plibvlc_media_t; cdecl;
+ libvlc_media_list_add_media : function(p_ml:Plibvlc_media_list_t; p_md:Plibvlc_media_t):cint; cdecl;
+ libvlc_media_list_insert_media : function(p_ml:Plibvlc_media_list_t; p_md:Plibvlc_media_t; i_pos:cint):cint; cdecl;
+ libvlc_media_list_remove_index : function(p_ml:Plibvlc_media_list_t; i_pos:cint):cint; cdecl;
+ libvlc_media_list_count : function(p_ml:Plibvlc_media_list_t):cint; cdecl;
+ libvlc_media_list_item_at_index : function(p_ml:Plibvlc_media_list_t; i_pos:cint):plibvlc_media_t; cdecl;
+ libvlc_media_list_index_of_item : function(p_ml:Plibvlc_media_list_t; p_md:Plibvlc_media_t):cint; cdecl;
+ libvlc_media_list_is_readonly : function(p_ml:Plibvlc_media_list_t):cint; cdecl;
+ libvlc_media_list_lock : procedure(p_ml:Plibvlc_media_list_t); cdecl;
+ libvlc_media_list_unlock : procedure(p_ml:Plibvlc_media_list_t); cdecl;
+ libvlc_media_list_event_manager : function(p_ml:Plibvlc_media_list_t):plibvlc_event_manager_t; cdecl;
+ libvlc_media_list_player_new : function(p_instance:Plibvlc_instance_t):plibvlc_media_list_player_t; cdecl;
+ libvlc_media_list_player_release : procedure(p_mlp:Plibvlc_media_list_player_t); cdecl;
+ libvlc_media_list_player_retain : procedure(p_mlp:Plibvlc_media_list_player_t); cdecl;
+ libvlc_media_list_player_event_manager : function(p_mlp:Plibvlc_media_list_player_t):plibvlc_event_manager_t; cdecl;
+ libvlc_media_list_player_set_media_player : procedure(p_mlp:Plibvlc_media_list_player_t; p_mi:Plibvlc_media_player_t); cdecl;
+ libvlc_media_list_player_set_media_list : procedure(p_mlp:Plibvlc_media_list_player_t; p_mlist:Plibvlc_media_list_t); cdecl;
+ libvlc_media_list_player_play : procedure(p_mlp:Plibvlc_media_list_player_t); cdecl;
+ libvlc_media_list_player_pause : procedure(p_mlp:Plibvlc_media_list_player_t); cdecl;
+ libvlc_media_list_player_is_playing : function(p_mlp:Plibvlc_media_list_player_t):cint; cdecl;
+ libvlc_media_list_player_get_state : function(p_mlp:Plibvlc_media_list_player_t):libvlc_state_t; cdecl;
+ libvlc_media_list_player_play_item_at_index : function(p_mlp:Plibvlc_media_list_player_t; i_index:cint):cint; cdecl;
+ libvlc_media_list_player_play_item : function(p_mlp:Plibvlc_media_list_player_t; p_md:Plibvlc_media_t):cint; cdecl;
+ libvlc_media_list_player_stop : procedure(p_mlp:Plibvlc_media_list_player_t); cdecl;
+ libvlc_media_list_player_next : function(p_mlp:Plibvlc_media_list_player_t):cint; cdecl;
+ libvlc_media_list_player_previous : function(p_mlp:Plibvlc_media_list_player_t):cint; cdecl;
+ libvlc_media_list_player_set_playback_mode : procedure(p_mlp:Plibvlc_media_list_player_t; e_mode:libvlc_playback_mode_t); cdecl;
+ libvlc_media_library_new : function(p_instance:Plibvlc_instance_t):plibvlc_media_library_t; cdecl;
+ libvlc_media_library_release : procedure(p_mlib:Plibvlc_media_library_t); cdecl;
+ libvlc_media_library_retain : procedure(p_mlib:Plibvlc_media_library_t); cdecl;
+ libvlc_media_library_load : function(p_mlib:Plibvlc_media_library_t):cint; cdecl;
+ libvlc_media_library_media_list : function(p_mlib:Plibvlc_media_library_t):plibvlc_media_list_t; cdecl;
+ libvlc_video_get_adjust_int : function(p_mi:Plibvlc_media_player_t; option:cunsigned):cint; cdecl;
+ libvlc_video_set_adjust_int : procedure(p_mi:Plibvlc_media_player_t; option:cunsigned; value:cint); cdecl;
+ libvlc_video_get_adjust_float : function(p_mi:Plibvlc_media_player_t; option:cunsigned):cfloat; cdecl;
+ libvlc_video_set_adjust_float : procedure(p_mi:Plibvlc_media_player_t; option:cunsigned; value:cfloat); cdecl;
+ libvlc_video_get_logo_int : function(p_mi:Plibvlc_media_player_t; option:cunsigned):cint; cdecl;
+ libvlc_video_set_logo_int : procedure(p_mi:Plibvlc_media_player_t; option:cunsigned; value:cint); cdecl;
+ libvlc_video_set_logo_string : procedure(p_mi:Plibvlc_media_player_t; option:cunsigned; psz_value:pcchar); cdecl;
+ libvlc_audio_set_format_callbacks : procedure(mp:Plibvlc_media_player_t; setup:libvlc_audio_setup_cb; cleanup:libvlc_audio_cleanup_cb); cdecl;
+ libvlc_audio_set_format : procedure(mp:Plibvlc_media_player_t; format:pcchar; rate:cunsigned; channels:cunsigned); cdecl;
+ libvlc_media_player_get_length : function(p_mi:Plibvlc_media_player_t):libvlc_time_t; cdecl;
+ libvlc_media_player_get_time : function(p_mi:Plibvlc_media_player_t):libvlc_time_t; cdecl;
+ libvlc_media_player_set_time : procedure(p_mi:Plibvlc_media_player_t; i_time:libvlc_time_t); cdecl;
+ libvlc_media_player_get_position : function(p_mi:Plibvlc_media_player_t):cfloat; cdecl;
+ libvlc_media_player_set_position : procedure(p_mi:Plibvlc_media_player_t; f_pos:cfloat); cdecl;
+ libvlc_media_player_set_chapter : procedure(p_mi:Plibvlc_media_player_t; i_chapter:cint); cdecl;
+ libvlc_media_player_get_chapter : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+ libvlc_media_player_get_chapter_count : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+ libvlc_media_player_will_play : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+ libvlc_media_player_get_chapter_count_for_title : function(p_mi:Plibvlc_media_player_t; i_title:cint):cint; cdecl;
+ libvlc_media_player_set_title : procedure(p_mi:Plibvlc_media_player_t; i_title:cint); cdecl;
+ libvlc_media_player_get_title : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+ libvlc_media_player_get_title_count : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+ libvlc_media_player_previous_chapter : procedure(p_mi:Plibvlc_media_player_t); cdecl;
+ libvlc_media_player_next_chapter : procedure(p_mi:Plibvlc_media_player_t); cdecl;
+ libvlc_media_player_get_rate : function(p_mi:Plibvlc_media_player_t):cfloat; cdecl;
+ libvlc_media_player_set_rate : function(p_mi:Plibvlc_media_player_t; rate:cfloat):cint; cdecl;
+ libvlc_media_player_get_state : function(p_mi:Plibvlc_media_player_t):libvlc_state_t; cdecl;
+ libvlc_media_player_get_fps : function(p_mi:Plibvlc_media_player_t):cfloat; cdecl;
+ libvlc_media_player_has_vout : function(p_mi:Plibvlc_media_player_t):cunsigned; cdecl;
+ libvlc_media_player_is_seekable : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+ libvlc_media_player_can_pause : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+ libvlc_media_player_next_frame : procedure(p_mi:Plibvlc_media_player_t); cdecl;
+ libvlc_media_player_navigate : procedure(p_mi:Plibvlc_media_player_t; navigate:cunsigned); cdecl;
+ libvlc_track_description_list_release : procedure(p_track_description:Plibvlc_track_description_t); cdecl;
+ libvlc_track_description_release : procedure(p_track_description:Plibvlc_track_description_t); cdecl;
+ libvlc_toggle_fullscreen : procedure(p_mi:Plibvlc_media_player_t); cdecl;
+ libvlc_set_fullscreen : procedure(p_mi:Plibvlc_media_player_t; b_fullscreen:cint); cdecl;
+ libvlc_get_fullscreen : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+ libvlc_video_set_key_input : procedure(p_mi:Plibvlc_media_player_t; on:cunsigned); cdecl;
+ libvlc_video_set_mouse_input : procedure(p_mi:Plibvlc_media_player_t; on:cunsigned); cdecl;
+ libvlc_video_get_size : function(p_mi:Plibvlc_media_player_t; num:cunsigned; px:pcunsigned; py:pcunsigned):cint; cdecl;
+ libvlc_video_get_height : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+ libvlc_video_get_width : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+ libvlc_video_get_cursor : function(p_mi:Plibvlc_media_player_t; num:cunsigned; px:pcint; py:pcint):cint; cdecl;
+ libvlc_video_get_scale : function(p_mi:Plibvlc_media_player_t):cfloat; cdecl;
+ libvlc_video_set_scale : procedure(p_mi:Plibvlc_media_player_t; f_factor:cfloat); cdecl;
+ libvlc_video_get_aspect_ratio : function(p_mi:Plibvlc_media_player_t):pcchar; cdecl;
+ libvlc_video_set_aspect_ratio : procedure(p_mi:Plibvlc_media_player_t; psz_aspect:pcchar); cdecl;
+ libvlc_video_get_spu : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+ libvlc_video_get_spu_count : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+ libvlc_video_get_spu_description : function(p_mi:Plibvlc_media_player_t):plibvlc_track_description_t; cdecl;
+ libvlc_video_set_spu : function(p_mi:Plibvlc_media_player_t; i_spu:cunsigned):cint; cdecl;
+ libvlc_video_set_subtitle_file : function(p_mi:Plibvlc_media_player_t; psz_subtitle:pcchar):cint; cdecl;
+ libvlc_video_get_spu_delay : function(p_mi:Plibvlc_media_player_t):int64_t; cdecl;
+ libvlc_video_set_spu_delay : function(p_mi:Plibvlc_media_player_t; i_delay:int64_t):cint; cdecl;
+ libvlc_video_get_title_description : function(p_mi:Plibvlc_media_player_t):plibvlc_track_description_t; cdecl;
+ libvlc_video_get_chapter_description : function(p_mi:Plibvlc_media_player_t; i_title:cint):plibvlc_track_description_t; cdecl;
+ libvlc_video_get_crop_geometry : function(p_mi:Plibvlc_media_player_t):pcchar; cdecl;
+ libvlc_video_set_crop_geometry : procedure(p_mi:Plibvlc_media_player_t; psz_geometry:pcchar); cdecl;
+ libvlc_video_get_teletext : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+ libvlc_video_set_teletext : procedure(p_mi:Plibvlc_media_player_t; i_page:cint); cdecl;
+ libvlc_toggle_teletext : procedure(p_mi:Plibvlc_media_player_t); cdecl;
+ libvlc_video_get_track_count : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+ libvlc_video_get_track_description : function(p_mi:Plibvlc_media_player_t):plibvlc_track_description_t; cdecl;
+ libvlc_video_get_track : function(p_mi:Plibvlc_media_player_t):cint; cdecl;
+ libvlc_video_set_track : function(p_mi:Plibvlc_media_player_t; i_track:cint):cint; cdecl;
+ libvlc_video_take_snapshot : function(p_mi:Plibvlc_media_player_t; num:cunsigned; psz_filepath:pcchar; i_width:cuint; i_height:cuint):cint; cdecl;
+ libvlc_video_set_deinterlace : procedure(p_mi:Plibvlc_media_player_t; psz_mode:pcchar); cdecl;
+ libvlc_video_get_marquee_int : function(p_mi:Plibvlc_media_player_t; option:cunsigned):cint; cdecl;
+ libvlc_video_get_marquee_string : function(p_mi:Plibvlc_media_player_t; option:cunsigned):pcchar; cdecl;
+ libvlc_video_set_marquee_int : procedure(p_mi:Plibvlc_media_player_t; option:cunsigned; i_val:cint); cdecl;
+ libvlc_video_set_marquee_string : procedure(p_mi:Plibvlc_media_player_t; option:cunsigned; psz_text:pcchar); cdecl;
+ libvlc_audio_set_callbacks : procedure(mp:Plibvlc_media_player_t; play:libvlc_audio_play_cb; pause:libvlc_audio_pause_cb; resume:libvlc_audio_resume_cb; flush:libvlc_audio_flush_cb;
+ drain:libvlc_audio_drain_cb; opaque:pointer); cdecl;
+ libvlc_audio_set_volume_callback : procedure(mp:Plibvlc_media_player_t; set_volume:libvlc_audio_set_volume_cb); cdecl;
+ libvlc_video_set_callbacks : procedure(mp:Plibvlc_media_player_t; lock:libvlc_video_lock_cb; unlock:libvlc_video_unlock_cb; display:libvlc_video_display_cb; opaque:pointer); cdecl;
+ libvlc_video_set_format : procedure(mp:Plibvlc_media_player_t; chroma:pcchar; width:cunsigned; height:cunsigned; pitch:cunsigned); cdecl;
+ libvlc_video_set_format_callbacks : procedure(mp:Plibvlc_media_player_t; setup:libvlc_video_format_cb; cleanup:libvlc_video_cleanup_cb); cdecl;
+ libvlc_media_player_set_nsobject : procedure(p_mi:Plibvlc_media_player_t; drawable:pointer); cdecl;
+ libvlc_media_player_get_nsobject : function(p_mi:Plibvlc_media_player_t):pointer; cdecl;
+ libvlc_media_player_set_agl : procedure(p_mi:Plibvlc_media_player_t; drawable:uint32_t); cdecl;
+ libvlc_media_player_get_agl : function(p_mi:Plibvlc_media_player_t):uint32_t; cdecl;
+ libvlc_media_player_set_xwindow : procedure(p_mi:Plibvlc_media_player_t; drawable:uint32_t); cdecl;
+ libvlc_media_player_get_xwindow : function(p_mi:Plibvlc_media_player_t):uint32_t; cdecl;
+ libvlc_media_player_set_hwnd : procedure(p_mi:Plibvlc_media_player_t; drawable:pointer); cdecl;
+ libvlc_media_player_get_hwnd : function(p_mi:Plibvlc_media_player_t):pointer; cdecl;
+ libvlc_media_discoverer_new_from_name : function(p_inst:Plibvlc_instance_t; psz_name:pcchar):plibvlc_media_discoverer_t; cdecl;
+ libvlc_media_discoverer_release : procedure(p_mdis:Plibvlc_media_discoverer_t); cdecl;
+ libvlc_media_discoverer_localized_name : function(p_mdis:Plibvlc_media_discoverer_t):pcchar; cdecl;
+ libvlc_media_discoverer_media_list : function(p_mdis:Plibvlc_media_discoverer_t):plibvlc_media_list_t; cdecl;
+ libvlc_media_discoverer_event_manager : function(p_mdis:Plibvlc_media_discoverer_t):plibvlc_event_manager_t; cdecl;
+ libvlc_media_discoverer_is_running : function(p_mdis:Plibvlc_media_discoverer_t):cint; cdecl;
+ libvlc_vlm_release : procedure(p_instance:Plibvlc_instance_t); cdecl;
+ libvlc_vlm_add_broadcast : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; psz_input:pcchar; psz_output:pcchar; i_options:cint;
+ ppsz_options:Ppcchar; b_enabled:cint; b_loop:cint):cint; cdecl;
+ libvlc_vlm_add_vod : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; psz_input:pcchar; i_options:cint; ppsz_options:Ppcchar;
+ b_enabled:cint; psz_mux:pcchar):cint; cdecl;
+ libvlc_vlm_del_media : function(p_instance:Plibvlc_instance_t; psz_name:pcchar):cint; cdecl;
+ libvlc_vlm_set_enabled : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; b_enabled:cint):cint; cdecl;
+ libvlc_vlm_set_output : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; psz_output:pcchar):cint; cdecl;
+ libvlc_vlm_set_input : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; psz_input:pcchar):cint; cdecl;
+ libvlc_vlm_add_input : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; psz_input:pcchar):cint; cdecl;
+ libvlc_vlm_set_loop : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; b_loop:cint):cint; cdecl;
+ libvlc_vlm_set_mux : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; psz_mux:pcchar):cint; cdecl;
+ libvlc_vlm_change_media : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; psz_input:pcchar; psz_output:pcchar; i_options:cint;
+ ppsz_options:Ppcchar; b_enabled:cint; b_loop:cint):cint; cdecl;
+ libvlc_vlm_play_media : function(p_instance:Plibvlc_instance_t; psz_name:pcchar):cint; cdecl;
+ libvlc_vlm_stop_media : function(p_instance:Plibvlc_instance_t; psz_name:pcchar):cint; cdecl;
+ libvlc_vlm_pause_media : function(p_instance:Plibvlc_instance_t; psz_name:pcchar):cint; cdecl;
+ libvlc_vlm_seek_media : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; f_percentage:cfloat):cint; cdecl;
+ libvlc_vlm_show_media : function(p_instance:Plibvlc_instance_t; psz_name:pcchar):pcchar; cdecl;
+ libvlc_vlm_get_media_instance_position : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; i_instance:cint):cfloat; cdecl;
+ libvlc_vlm_get_media_instance_time : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; i_instance:cint):cint; cdecl;
+ libvlc_vlm_get_media_instance_length : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; i_instance:cint):cint; cdecl;
+ libvlc_vlm_get_media_instance_rate : function(p_instance:Plibvlc_instance_t; psz_name:pcchar; i_instance:cint):cint; cdecl;
+ libvlc_vlm_get_event_manager : function(p_instance:Plibvlc_instance_t):plibvlc_event_manager_t; cdecl;
+ libvlc_playlist_play : procedure(p_instance:Plibvlc_instance_t; i_id:cint; i_options:cint; ppsz_options:Ppcchar); cdecl;
+
+Procedure Freelibvlc;
+Procedure Loadlibvlc(lib : AnsiString; CheckProcNames : Boolean = False);
+
+implementation
+
+uses
+ SysUtils, dynlibs;
+
+var
+ hlib : tlibhandle;
+ LibRefCount : Integer;
+
+procedure Freelibvlc;
+
+begin
+ if (LibRefCount>0) then
+ Dec(LibRefCount);
+ if LibRefCount>0 then
+ exit;
+ FreeLibrary(hlib);
+ libvlc_errmsg:=nil;
+ libvlc_clearerr:=nil;
+ libvlc_printerr:=nil;
+ libvlc_new:=nil;
+ libvlc_release:=nil;
+ libvlc_retain:=nil;
+ libvlc_add_intf:=nil;
+ libvlc_set_exit_handler:=nil;
+ libvlc_wait:=nil;
+ libvlc_set_user_agent:=nil;
+ libvlc_get_version:=nil;
+ libvlc_get_compiler:=nil;
+ libvlc_get_changeset:=nil;
+ libvlc_free:=nil;
+ libvlc_event_attach:=nil;
+ libvlc_event_detach:=nil;
+ libvlc_event_type_name:=nil;
+ libvlc_get_log_verbosity:=nil;
+ libvlc_set_log_verbosity:=nil;
+ libvlc_log_open:=nil;
+ libvlc_log_close:=nil;
+ libvlc_log_count:=nil;
+ libvlc_log_clear:=nil;
+ libvlc_log_get_iterator:=nil;
+ libvlc_log_iterator_free:=nil;
+ libvlc_log_iterator_has_next:=nil;
+ libvlc_log_iterator_next:=nil;
+ libvlc_module_description_list_release:=nil;
+ libvlc_audio_filter_list_get:=nil;
+ libvlc_video_filter_list_get:=nil;
+ libvlc_clock:=nil;
+ libvlc_media_new_location:=nil;
+ libvlc_media_new_path:=nil;
+ libvlc_media_new_fd:=nil;
+ libvlc_media_new_as_node:=nil;
+ libvlc_media_add_option:=nil;
+ libvlc_media_add_option_flag:=nil;
+ libvlc_media_retain:=nil;
+ libvlc_media_release:=nil;
+ libvlc_media_get_mrl:=nil;
+ libvlc_media_duplicate:=nil;
+ libvlc_media_get_meta:=nil;
+ libvlc_media_set_meta:=nil;
+ libvlc_media_save_meta:=nil;
+ libvlc_media_get_state:=nil;
+ libvlc_media_get_stats:=nil;
+ libvlc_media_subitems:=nil;
+ libvlc_media_event_manager:=nil;
+ libvlc_media_get_duration:=nil;
+ libvlc_media_parse:=nil;
+ libvlc_media_parse_async:=nil;
+ libvlc_media_is_parsed:=nil;
+ libvlc_media_set_user_data:=nil;
+ libvlc_media_get_user_data:=nil;
+ libvlc_media_get_tracks_info:=nil;
+ libvlc_media_player_new:=nil;
+ libvlc_media_player_new_from_media:=nil;
+ libvlc_media_player_release:=nil;
+ libvlc_media_player_retain:=nil;
+ libvlc_media_player_set_media:=nil;
+ libvlc_media_player_get_media:=nil;
+ libvlc_media_player_event_manager:=nil;
+ libvlc_media_player_is_playing:=nil;
+ libvlc_media_player_play:=nil;
+ libvlc_media_player_set_pause:=nil;
+ libvlc_media_player_pause:=nil;
+ libvlc_media_player_stop:=nil;
+ libvlc_video_set_callbacks:=nil;
+ libvlc_video_set_format:=nil;
+ libvlc_video_set_format_callbacks:=nil;
+ libvlc_media_player_set_nsobject:=nil;
+ libvlc_media_player_get_nsobject:=nil;
+ libvlc_media_player_set_agl:=nil;
+ libvlc_media_player_get_agl:=nil;
+ libvlc_media_player_set_xwindow:=nil;
+ libvlc_media_player_get_xwindow:=nil;
+ libvlc_media_player_set_hwnd:=nil;
+ libvlc_media_player_get_hwnd:=nil;
+ libvlc_audio_set_callbacks:=nil;
+ libvlc_audio_set_volume_callback:=nil;
+ libvlc_audio_set_format_callbacks:=nil;
+ libvlc_audio_set_format:=nil;
+ libvlc_media_player_get_length:=nil;
+ libvlc_media_player_get_time:=nil;
+ libvlc_media_player_set_time:=nil;
+ libvlc_media_player_get_position:=nil;
+ libvlc_media_player_set_position:=nil;
+ libvlc_media_player_set_chapter:=nil;
+ libvlc_media_player_get_chapter:=nil;
+ libvlc_media_player_get_chapter_count:=nil;
+ libvlc_media_player_will_play:=nil;
+ libvlc_media_player_get_chapter_count_for_title:=nil;
+ libvlc_media_player_set_title:=nil;
+ libvlc_media_player_get_title:=nil;
+ libvlc_media_player_get_title_count:=nil;
+ libvlc_media_player_previous_chapter:=nil;
+ libvlc_media_player_next_chapter:=nil;
+ libvlc_media_player_get_rate:=nil;
+ libvlc_media_player_set_rate:=nil;
+ libvlc_media_player_get_state:=nil;
+ libvlc_media_player_get_fps:=nil;
+ libvlc_media_player_has_vout:=nil;
+ libvlc_media_player_is_seekable:=nil;
+ libvlc_media_player_can_pause:=nil;
+ libvlc_media_player_next_frame:=nil;
+ libvlc_media_player_navigate:=nil;
+ libvlc_track_description_list_release:=nil;
+ libvlc_track_description_release:=nil;
+ libvlc_toggle_fullscreen:=nil;
+ libvlc_set_fullscreen:=nil;
+ libvlc_get_fullscreen:=nil;
+ libvlc_video_set_key_input:=nil;
+ libvlc_video_set_mouse_input:=nil;
+ libvlc_video_get_size:=nil;
+ libvlc_video_get_height:=nil;
+ libvlc_video_get_width:=nil;
+ libvlc_video_get_cursor:=nil;
+ libvlc_video_get_scale:=nil;
+ libvlc_video_set_scale:=nil;
+ libvlc_video_get_aspect_ratio:=nil;
+ libvlc_video_set_aspect_ratio:=nil;
+ libvlc_video_get_spu:=nil;
+ libvlc_video_get_spu_count:=nil;
+ libvlc_video_get_spu_description:=nil;
+ libvlc_video_set_spu:=nil;
+ libvlc_video_set_subtitle_file:=nil;
+ libvlc_video_get_spu_delay:=nil;
+ libvlc_video_set_spu_delay:=nil;
+ libvlc_video_get_title_description:=nil;
+ libvlc_video_get_chapter_description:=nil;
+ libvlc_video_get_crop_geometry:=nil;
+ libvlc_video_set_crop_geometry:=nil;
+ libvlc_video_get_teletext:=nil;
+ libvlc_video_set_teletext:=nil;
+ libvlc_toggle_teletext:=nil;
+ libvlc_video_get_track_count:=nil;
+ libvlc_video_get_track_description:=nil;
+ libvlc_video_get_track:=nil;
+ libvlc_video_set_track:=nil;
+ libvlc_video_take_snapshot:=nil;
+ libvlc_video_set_deinterlace:=nil;
+ libvlc_video_get_marquee_int:=nil;
+ libvlc_video_get_marquee_string:=nil;
+ libvlc_video_set_marquee_int:=nil;
+ libvlc_video_set_marquee_string:=nil;
+ libvlc_video_get_logo_int:=nil;
+ libvlc_video_set_logo_int:=nil;
+ libvlc_video_set_logo_string:=nil;
+ libvlc_video_get_adjust_int:=nil;
+ libvlc_video_set_adjust_int:=nil;
+ libvlc_video_get_adjust_float:=nil;
+ libvlc_video_set_adjust_float:=nil;
+ libvlc_audio_output_list_get:=nil;
+ libvlc_audio_output_list_release:=nil;
+ libvlc_audio_output_set:=nil;
+ libvlc_audio_output_device_count:=nil;
+ libvlc_audio_output_device_longname:=nil;
+ libvlc_audio_output_device_id:=nil;
+ libvlc_audio_output_device_set:=nil;
+ libvlc_audio_output_get_device_type:=nil;
+ libvlc_audio_output_set_device_type:=nil;
+ libvlc_audio_toggle_mute:=nil;
+ libvlc_audio_get_mute:=nil;
+ libvlc_audio_set_mute:=nil;
+ libvlc_audio_get_volume:=nil;
+ libvlc_audio_set_volume:=nil;
+ libvlc_audio_get_track_count:=nil;
+ libvlc_audio_get_track_description:=nil;
+ libvlc_audio_get_track:=nil;
+ libvlc_audio_set_track:=nil;
+ libvlc_audio_get_channel:=nil;
+ libvlc_audio_set_channel:=nil;
+ libvlc_audio_get_delay:=nil;
+ libvlc_audio_set_delay:=nil;
+ libvlc_media_list_new:=nil;
+ libvlc_media_list_release:=nil;
+ libvlc_media_list_retain:=nil;
+ libvlc_media_list_add_file_content:=nil;
+ libvlc_media_list_set_media:=nil;
+ libvlc_media_list_media:=nil;
+ libvlc_media_list_add_media:=nil;
+ libvlc_media_list_insert_media:=nil;
+ libvlc_media_list_remove_index:=nil;
+ libvlc_media_list_count:=nil;
+ libvlc_media_list_item_at_index:=nil;
+ libvlc_media_list_index_of_item:=nil;
+ libvlc_media_list_is_readonly:=nil;
+ libvlc_media_list_lock:=nil;
+ libvlc_media_list_unlock:=nil;
+ libvlc_media_list_event_manager:=nil;
+ libvlc_media_list_player_new:=nil;
+ libvlc_media_list_player_release:=nil;
+ libvlc_media_list_player_retain:=nil;
+ libvlc_media_list_player_event_manager:=nil;
+ libvlc_media_list_player_set_media_player:=nil;
+ libvlc_media_list_player_set_media_list:=nil;
+ libvlc_media_list_player_play:=nil;
+ libvlc_media_list_player_pause:=nil;
+ libvlc_media_list_player_is_playing:=nil;
+ libvlc_media_list_player_get_state:=nil;
+ libvlc_media_list_player_play_item_at_index:=nil;
+ libvlc_media_list_player_play_item:=nil;
+ libvlc_media_list_player_stop:=nil;
+ libvlc_media_list_player_next:=nil;
+ libvlc_media_list_player_previous:=nil;
+ libvlc_media_list_player_set_playback_mode:=nil;
+ libvlc_media_library_new:=nil;
+ libvlc_media_library_release:=nil;
+ libvlc_media_library_retain:=nil;
+ libvlc_media_library_load:=nil;
+ libvlc_media_library_media_list:=nil;
+ libvlc_media_discoverer_new_from_name:=nil;
+ libvlc_media_discoverer_release:=nil;
+ libvlc_media_discoverer_localized_name:=nil;
+ libvlc_media_discoverer_media_list:=nil;
+ libvlc_media_discoverer_event_manager:=nil;
+ libvlc_media_discoverer_is_running:=nil;
+ libvlc_vlm_release:=nil;
+ libvlc_vlm_add_broadcast:=nil;
+ libvlc_vlm_add_vod:=nil;
+ libvlc_vlm_del_media:=nil;
+ libvlc_vlm_set_enabled:=nil;
+ libvlc_vlm_set_output:=nil;
+ libvlc_vlm_set_input:=nil;
+ libvlc_vlm_add_input:=nil;
+ libvlc_vlm_set_loop:=nil;
+ libvlc_vlm_set_mux:=nil;
+ libvlc_vlm_change_media:=nil;
+ libvlc_vlm_play_media:=nil;
+ libvlc_vlm_stop_media:=nil;
+ libvlc_vlm_pause_media:=nil;
+ libvlc_vlm_seek_media:=nil;
+ libvlc_vlm_show_media:=nil;
+ libvlc_vlm_get_media_instance_position:=nil;
+ libvlc_vlm_get_media_instance_time:=nil;
+ libvlc_vlm_get_media_instance_length:=nil;
+ libvlc_vlm_get_media_instance_rate:=nil;
+ libvlc_vlm_get_event_manager:=nil;
+ libvlc_playlist_play:=nil;
+end;
+
+
+Procedure Loadlibvlc(lib : AnsiString; CheckProcNames : Boolean = False);
+
+ Function GetProcAddress(h : TLibHandle; Name : AnsiString) : Pointer;
+
+ begin
+ Result:=dynlibs.GetProcAddress(h,Name);
+ If (Result=Nil) and CheckProcNames then
+ raise Exception.CreateFmt('Could not find procedure address: %s ',[Name]);
+ end;
+
+ Procedure EM(FN : String);
+
+ begin
+ {$ifndef VER2_6}
+ Raise Exception.CreateFmt('Could not load library "%s": %s',[FN,GetLoadErrorStr]);
+ {$else}
+ raise Exception.CreateFmt('Could not load library "%s"',[FN]);
+ {$endif}
+ end;
+
+
+
+Var
+ D : String;
+
+begin
+ if (hLib<>NilHandle) then
+ begin
+ Inc(LibRefCount);
+ Exit;
+ end;
+ D:=ExtractFilePath(lib);
+ {$ifdef windows}
+ if (LoadLibrary(d+corelibname)=NilHandle) then
+ if (d='') and (LoadLibrary(DefaultlibPath+corelibname)=NilHandle) then
+ EM(DefaultlibPath+corelibname);
+ {$endif}
+ hlib:=LoadLibrary(lib);
+ if (hlib=NilHandle) then
+{$ifndef windows}
+ EM(Lib);
+{$else}
+ if (d='') then
+ begin
+ hlib:=LoadLibrary(DefaultlibPath+ExtractFileName(Lib));
+ if (hlib=NilHandle) then
+ EM(Lib);
+ end;
+{$endif}
+ Inc(LibRefCount);
+ pointer(libvlc_errmsg):=GetProcAddress(hlib,'libvlc_errmsg');
+ pointer(libvlc_clearerr):=GetProcAddress(hlib,'libvlc_clearerr');
+ pointer(libvlc_printerr):=GetProcAddress(hlib,'libvlc_printerr');
+ pointer(libvlc_new):=GetProcAddress(hlib,'libvlc_new');
+ pointer(libvlc_release):=GetProcAddress(hlib,'libvlc_release');
+ pointer(libvlc_retain):=GetProcAddress(hlib,'libvlc_retain');
+ pointer(libvlc_add_intf):=GetProcAddress(hlib,'libvlc_add_intf');
+ pointer(libvlc_set_exit_handler):=GetProcAddress(hlib,'libvlc_set_exit_handler');
+ pointer(libvlc_wait):=GetProcAddress(hlib,'libvlc_wait');
+ pointer(libvlc_set_user_agent):=GetProcAddress(hlib,'libvlc_set_user_agent');
+ pointer(libvlc_get_version):=GetProcAddress(hlib,'libvlc_get_version');
+ pointer(libvlc_get_compiler):=GetProcAddress(hlib,'libvlc_get_compiler');
+ pointer(libvlc_get_changeset):=GetProcAddress(hlib,'libvlc_get_changeset');
+ pointer(libvlc_free):=GetProcAddress(hlib,'libvlc_free');
+ pointer(libvlc_event_attach):=GetProcAddress(hlib,'libvlc_event_attach');
+ pointer(libvlc_event_detach):=GetProcAddress(hlib,'libvlc_event_detach');
+ pointer(libvlc_event_type_name):=GetProcAddress(hlib,'libvlc_event_type_name');
+ pointer(libvlc_get_log_verbosity):=GetProcAddress(hlib,'libvlc_get_log_verbosity');
+ pointer(libvlc_set_log_verbosity):=GetProcAddress(hlib,'libvlc_set_log_verbosity');
+ pointer(libvlc_log_open):=GetProcAddress(hlib,'libvlc_log_open');
+ pointer(libvlc_log_close):=GetProcAddress(hlib,'libvlc_log_close');
+ pointer(libvlc_log_count):=GetProcAddress(hlib,'libvlc_log_count');
+ pointer(libvlc_log_clear):=GetProcAddress(hlib,'libvlc_log_clear');
+ pointer(libvlc_log_get_iterator):=GetProcAddress(hlib,'libvlc_log_get_iterator');
+ pointer(libvlc_log_iterator_free):=GetProcAddress(hlib,'libvlc_log_iterator_free');
+ pointer(libvlc_log_iterator_has_next):=GetProcAddress(hlib,'libvlc_log_iterator_has_next');
+ pointer(libvlc_log_iterator_next):=GetProcAddress(hlib,'libvlc_log_iterator_next');
+ pointer(libvlc_module_description_list_release):=GetProcAddress(hlib,'libvlc_module_description_list_release');
+ pointer(libvlc_audio_filter_list_get):=GetProcAddress(hlib,'libvlc_audio_filter_list_get');
+ pointer(libvlc_video_filter_list_get):=GetProcAddress(hlib,'libvlc_video_filter_list_get');
+ pointer(libvlc_clock):=GetProcAddress(hlib,'libvlc_clock');
+ pointer(libvlc_media_new_location):=GetProcAddress(hlib,'libvlc_media_new_location');
+ pointer(libvlc_media_new_path):=GetProcAddress(hlib,'libvlc_media_new_path');
+ pointer(libvlc_media_new_fd):=GetProcAddress(hlib,'libvlc_media_new_fd');
+ pointer(libvlc_media_new_as_node):=GetProcAddress(hlib,'libvlc_media_new_as_node');
+ pointer(libvlc_media_add_option):=GetProcAddress(hlib,'libvlc_media_add_option');
+ pointer(libvlc_media_add_option_flag):=GetProcAddress(hlib,'libvlc_media_add_option_flag');
+ pointer(libvlc_media_retain):=GetProcAddress(hlib,'libvlc_media_retain');
+ pointer(libvlc_media_release):=GetProcAddress(hlib,'libvlc_media_release');
+ pointer(libvlc_media_get_mrl):=GetProcAddress(hlib,'libvlc_media_get_mrl');
+ pointer(libvlc_media_duplicate):=GetProcAddress(hlib,'libvlc_media_duplicate');
+ pointer(libvlc_media_get_meta):=GetProcAddress(hlib,'libvlc_media_get_meta');
+ pointer(libvlc_media_set_meta):=GetProcAddress(hlib,'libvlc_media_set_meta');
+ pointer(libvlc_media_save_meta):=GetProcAddress(hlib,'libvlc_media_save_meta');
+ pointer(libvlc_media_get_state):=GetProcAddress(hlib,'libvlc_media_get_state');
+ pointer(libvlc_media_get_stats):=GetProcAddress(hlib,'libvlc_media_get_stats');
+ pointer(libvlc_media_subitems):=GetProcAddress(hlib,'libvlc_media_subitems');
+ pointer(libvlc_media_event_manager):=GetProcAddress(hlib,'libvlc_media_event_manager');
+ pointer(libvlc_media_get_duration):=GetProcAddress(hlib,'libvlc_media_get_duration');
+ pointer(libvlc_media_parse):=GetProcAddress(hlib,'libvlc_media_parse');
+ pointer(libvlc_media_parse_async):=GetProcAddress(hlib,'libvlc_media_parse_async');
+ pointer(libvlc_media_is_parsed):=GetProcAddress(hlib,'libvlc_media_is_parsed');
+ pointer(libvlc_media_set_user_data):=GetProcAddress(hlib,'libvlc_media_set_user_data');
+ pointer(libvlc_media_get_user_data):=GetProcAddress(hlib,'libvlc_media_get_user_data');
+ pointer(libvlc_media_get_tracks_info):=GetProcAddress(hlib,'libvlc_media_get_tracks_info');
+ pointer(libvlc_media_player_new):=GetProcAddress(hlib,'libvlc_media_player_new');
+ pointer(libvlc_media_player_new_from_media):=GetProcAddress(hlib,'libvlc_media_player_new_from_media');
+ pointer(libvlc_media_player_release):=GetProcAddress(hlib,'libvlc_media_player_release');
+ pointer(libvlc_media_player_retain):=GetProcAddress(hlib,'libvlc_media_player_retain');
+ pointer(libvlc_media_player_set_media):=GetProcAddress(hlib,'libvlc_media_player_set_media');
+ pointer(libvlc_media_player_get_media):=GetProcAddress(hlib,'libvlc_media_player_get_media');
+ pointer(libvlc_media_player_event_manager):=GetProcAddress(hlib,'libvlc_media_player_event_manager');
+ pointer(libvlc_media_player_is_playing):=GetProcAddress(hlib,'libvlc_media_player_is_playing');
+ pointer(libvlc_media_player_play):=GetProcAddress(hlib,'libvlc_media_player_play');
+ pointer(libvlc_media_player_set_pause):=GetProcAddress(hlib,'libvlc_media_player_set_pause');
+ pointer(libvlc_media_player_pause):=GetProcAddress(hlib,'libvlc_media_player_pause');
+ pointer(libvlc_media_player_stop):=GetProcAddress(hlib,'libvlc_media_player_stop');
+ pointer(libvlc_video_set_callbacks):=GetProcAddress(hlib,'libvlc_video_set_callbacks');
+ pointer(libvlc_video_set_format):=GetProcAddress(hlib,'libvlc_video_set_format');
+ pointer(libvlc_video_set_format_callbacks):=GetProcAddress(hlib,'libvlc_video_set_format_callbacks');
+ pointer(libvlc_media_player_set_nsobject):=GetProcAddress(hlib,'libvlc_media_player_set_nsobject');
+ pointer(libvlc_media_player_get_nsobject):=GetProcAddress(hlib,'libvlc_media_player_get_nsobject');
+ pointer(libvlc_media_player_set_agl):=GetProcAddress(hlib,'libvlc_media_player_set_agl');
+ pointer(libvlc_media_player_get_agl):=GetProcAddress(hlib,'libvlc_media_player_get_agl');
+ pointer(libvlc_media_player_set_xwindow):=GetProcAddress(hlib,'libvlc_media_player_set_xwindow');
+ pointer(libvlc_media_player_get_xwindow):=GetProcAddress(hlib,'libvlc_media_player_get_xwindow');
+ pointer(libvlc_media_player_set_hwnd):=GetProcAddress(hlib,'libvlc_media_player_set_hwnd');
+ pointer(libvlc_media_player_get_hwnd):=GetProcAddress(hlib,'libvlc_media_player_get_hwnd');
+ pointer(libvlc_audio_set_callbacks):=GetProcAddress(hlib,'libvlc_audio_set_callbacks');
+ pointer(libvlc_audio_set_volume_callback):=GetProcAddress(hlib,'libvlc_audio_set_volume_callback');
+ pointer(libvlc_audio_set_format_callbacks):=GetProcAddress(hlib,'libvlc_audio_set_format_callbacks');
+ pointer(libvlc_audio_set_format):=GetProcAddress(hlib,'libvlc_audio_set_format');
+ pointer(libvlc_media_player_get_length):=GetProcAddress(hlib,'libvlc_media_player_get_length');
+ pointer(libvlc_media_player_get_time):=GetProcAddress(hlib,'libvlc_media_player_get_time');
+ pointer(libvlc_media_player_set_time):=GetProcAddress(hlib,'libvlc_media_player_set_time');
+ pointer(libvlc_media_player_get_position):=GetProcAddress(hlib,'libvlc_media_player_get_position');
+ pointer(libvlc_media_player_set_position):=GetProcAddress(hlib,'libvlc_media_player_set_position');
+ pointer(libvlc_media_player_set_chapter):=GetProcAddress(hlib,'libvlc_media_player_set_chapter');
+ pointer(libvlc_media_player_get_chapter):=GetProcAddress(hlib,'libvlc_media_player_get_chapter');
+ pointer(libvlc_media_player_get_chapter_count):=GetProcAddress(hlib,'libvlc_media_player_get_chapter_count');
+ pointer(libvlc_media_player_will_play):=GetProcAddress(hlib,'libvlc_media_player_will_play');
+ pointer(libvlc_media_player_get_chapter_count_for_title):=GetProcAddress(hlib,'libvlc_media_player_get_chapter_count_for_title');
+ pointer(libvlc_media_player_set_title):=GetProcAddress(hlib,'libvlc_media_player_set_title');
+ pointer(libvlc_media_player_get_title):=GetProcAddress(hlib,'libvlc_media_player_get_title');
+ pointer(libvlc_media_player_get_title_count):=GetProcAddress(hlib,'libvlc_media_player_get_title_count');
+ pointer(libvlc_media_player_previous_chapter):=GetProcAddress(hlib,'libvlc_media_player_previous_chapter');
+ pointer(libvlc_media_player_next_chapter):=GetProcAddress(hlib,'libvlc_media_player_next_chapter');
+ pointer(libvlc_media_player_get_rate):=GetProcAddress(hlib,'libvlc_media_player_get_rate');
+ pointer(libvlc_media_player_set_rate):=GetProcAddress(hlib,'libvlc_media_player_set_rate');
+ pointer(libvlc_media_player_get_state):=GetProcAddress(hlib,'libvlc_media_player_get_state');
+ pointer(libvlc_media_player_get_fps):=GetProcAddress(hlib,'libvlc_media_player_get_fps');
+ pointer(libvlc_media_player_has_vout):=GetProcAddress(hlib,'libvlc_media_player_has_vout');
+ pointer(libvlc_media_player_is_seekable):=GetProcAddress(hlib,'libvlc_media_player_is_seekable');
+ pointer(libvlc_media_player_can_pause):=GetProcAddress(hlib,'libvlc_media_player_can_pause');
+ pointer(libvlc_media_player_next_frame):=GetProcAddress(hlib,'libvlc_media_player_next_frame');
+ pointer(libvlc_media_player_navigate):=GetProcAddress(hlib,'libvlc_media_player_navigate');
+ pointer(libvlc_track_description_list_release):=GetProcAddress(hlib,'libvlc_track_description_list_release');
+ pointer(libvlc_track_description_release):=GetProcAddress(hlib,'libvlc_track_description_release');
+ pointer(libvlc_toggle_fullscreen):=GetProcAddress(hlib,'libvlc_toggle_fullscreen');
+ pointer(libvlc_set_fullscreen):=GetProcAddress(hlib,'libvlc_set_fullscreen');
+ pointer(libvlc_get_fullscreen):=GetProcAddress(hlib,'libvlc_get_fullscreen');
+ pointer(libvlc_video_set_key_input):=GetProcAddress(hlib,'libvlc_video_set_key_input');
+ pointer(libvlc_video_set_mouse_input):=GetProcAddress(hlib,'libvlc_video_set_mouse_input');
+ pointer(libvlc_video_get_size):=GetProcAddress(hlib,'libvlc_video_get_size');
+ pointer(libvlc_video_get_height):=GetProcAddress(hlib,'libvlc_video_get_height');
+ pointer(libvlc_video_get_width):=GetProcAddress(hlib,'libvlc_video_get_width');
+ pointer(libvlc_video_get_cursor):=GetProcAddress(hlib,'libvlc_video_get_cursor');
+ pointer(libvlc_video_get_scale):=GetProcAddress(hlib,'libvlc_video_get_scale');
+ pointer(libvlc_video_set_scale):=GetProcAddress(hlib,'libvlc_video_set_scale');
+ pointer(libvlc_video_get_aspect_ratio):=GetProcAddress(hlib,'libvlc_video_get_aspect_ratio');
+ pointer(libvlc_video_set_aspect_ratio):=GetProcAddress(hlib,'libvlc_video_set_aspect_ratio');
+ pointer(libvlc_video_get_spu):=GetProcAddress(hlib,'libvlc_video_get_spu');
+ pointer(libvlc_video_get_spu_count):=GetProcAddress(hlib,'libvlc_video_get_spu_count');
+ pointer(libvlc_video_get_spu_description):=GetProcAddress(hlib,'libvlc_video_get_spu_description');
+ pointer(libvlc_video_set_spu):=GetProcAddress(hlib,'libvlc_video_set_spu');
+ pointer(libvlc_video_set_subtitle_file):=GetProcAddress(hlib,'libvlc_video_set_subtitle_file');
+ pointer(libvlc_video_get_spu_delay):=GetProcAddress(hlib,'libvlc_video_get_spu_delay');
+ pointer(libvlc_video_set_spu_delay):=GetProcAddress(hlib,'libvlc_video_set_spu_delay');
+ pointer(libvlc_video_get_title_description):=GetProcAddress(hlib,'libvlc_video_get_title_description');
+ pointer(libvlc_video_get_chapter_description):=GetProcAddress(hlib,'libvlc_video_get_chapter_description');
+ pointer(libvlc_video_get_crop_geometry):=GetProcAddress(hlib,'libvlc_video_get_crop_geometry');
+ pointer(libvlc_video_set_crop_geometry):=GetProcAddress(hlib,'libvlc_video_set_crop_geometry');
+ pointer(libvlc_video_get_teletext):=GetProcAddress(hlib,'libvlc_video_get_teletext');
+ pointer(libvlc_video_set_teletext):=GetProcAddress(hlib,'libvlc_video_set_teletext');
+ pointer(libvlc_toggle_teletext):=GetProcAddress(hlib,'libvlc_toggle_teletext');
+ pointer(libvlc_video_get_track_count):=GetProcAddress(hlib,'libvlc_video_get_track_count');
+ pointer(libvlc_video_get_track_description):=GetProcAddress(hlib,'libvlc_video_get_track_description');
+ pointer(libvlc_video_get_track):=GetProcAddress(hlib,'libvlc_video_get_track');
+ pointer(libvlc_video_set_track):=GetProcAddress(hlib,'libvlc_video_set_track');
+ pointer(libvlc_video_take_snapshot):=GetProcAddress(hlib,'libvlc_video_take_snapshot');
+ pointer(libvlc_video_set_deinterlace):=GetProcAddress(hlib,'libvlc_video_set_deinterlace');
+ pointer(libvlc_video_get_marquee_int):=GetProcAddress(hlib,'libvlc_video_get_marquee_int');
+ pointer(libvlc_video_get_marquee_string):=GetProcAddress(hlib,'libvlc_video_get_marquee_string');
+ pointer(libvlc_video_set_marquee_int):=GetProcAddress(hlib,'libvlc_video_set_marquee_int');
+ pointer(libvlc_video_set_marquee_string):=GetProcAddress(hlib,'libvlc_video_set_marquee_string');
+ pointer(libvlc_video_get_logo_int):=GetProcAddress(hlib,'libvlc_video_get_logo_int');
+ pointer(libvlc_video_set_logo_int):=GetProcAddress(hlib,'libvlc_video_set_logo_int');
+ pointer(libvlc_video_set_logo_string):=GetProcAddress(hlib,'libvlc_video_set_logo_string');
+ pointer(libvlc_video_get_adjust_int):=GetProcAddress(hlib,'libvlc_video_get_adjust_int');
+ pointer(libvlc_video_set_adjust_int):=GetProcAddress(hlib,'libvlc_video_set_adjust_int');
+ pointer(libvlc_video_get_adjust_float):=GetProcAddress(hlib,'libvlc_video_get_adjust_float');
+ pointer(libvlc_video_set_adjust_float):=GetProcAddress(hlib,'libvlc_video_set_adjust_float');
+ pointer(libvlc_audio_output_list_get):=GetProcAddress(hlib,'libvlc_audio_output_list_get');
+ pointer(libvlc_audio_output_list_release):=GetProcAddress(hlib,'libvlc_audio_output_list_release');
+ pointer(libvlc_audio_output_set):=GetProcAddress(hlib,'libvlc_audio_output_set');
+ pointer(libvlc_audio_output_device_count):=GetProcAddress(hlib,'libvlc_audio_output_device_count');
+ pointer(libvlc_audio_output_device_longname):=GetProcAddress(hlib,'libvlc_audio_output_device_longname');
+ pointer(libvlc_audio_output_device_id):=GetProcAddress(hlib,'libvlc_audio_output_device_id');
+ pointer(libvlc_audio_output_device_set):=GetProcAddress(hlib,'libvlc_audio_output_device_set');
+ pointer(libvlc_audio_output_get_device_type):=GetProcAddress(hlib,'libvlc_audio_output_get_device_type');
+ pointer(libvlc_audio_output_set_device_type):=GetProcAddress(hlib,'libvlc_audio_output_set_device_type');
+ pointer(libvlc_audio_toggle_mute):=GetProcAddress(hlib,'libvlc_audio_toggle_mute');
+ pointer(libvlc_audio_get_mute):=GetProcAddress(hlib,'libvlc_audio_get_mute');
+ pointer(libvlc_audio_set_mute):=GetProcAddress(hlib,'libvlc_audio_set_mute');
+ pointer(libvlc_audio_get_volume):=GetProcAddress(hlib,'libvlc_audio_get_volume');
+ pointer(libvlc_audio_set_volume):=GetProcAddress(hlib,'libvlc_audio_set_volume');
+ pointer(libvlc_audio_get_track_count):=GetProcAddress(hlib,'libvlc_audio_get_track_count');
+ pointer(libvlc_audio_get_track_description):=GetProcAddress(hlib,'libvlc_audio_get_track_description');
+ pointer(libvlc_audio_get_track):=GetProcAddress(hlib,'libvlc_audio_get_track');
+ pointer(libvlc_audio_set_track):=GetProcAddress(hlib,'libvlc_audio_set_track');
+ pointer(libvlc_audio_get_channel):=GetProcAddress(hlib,'libvlc_audio_get_channel');
+ pointer(libvlc_audio_set_channel):=GetProcAddress(hlib,'libvlc_audio_set_channel');
+ pointer(libvlc_audio_get_delay):=GetProcAddress(hlib,'libvlc_audio_get_delay');
+ pointer(libvlc_audio_set_delay):=GetProcAddress(hlib,'libvlc_audio_set_delay');
+ pointer(libvlc_media_list_new):=GetProcAddress(hlib,'libvlc_media_list_new');
+ pointer(libvlc_media_list_release):=GetProcAddress(hlib,'libvlc_media_list_release');
+ pointer(libvlc_media_list_retain):=GetProcAddress(hlib,'libvlc_media_list_retain');
+ pointer(libvlc_media_list_add_file_content):=GetProcAddress(hlib,'libvlc_media_list_add_file_content');
+ pointer(libvlc_media_list_set_media):=GetProcAddress(hlib,'libvlc_media_list_set_media');
+ pointer(libvlc_media_list_media):=GetProcAddress(hlib,'libvlc_media_list_media');
+ pointer(libvlc_media_list_add_media):=GetProcAddress(hlib,'libvlc_media_list_add_media');
+ pointer(libvlc_media_list_insert_media):=GetProcAddress(hlib,'libvlc_media_list_insert_media');
+ pointer(libvlc_media_list_remove_index):=GetProcAddress(hlib,'libvlc_media_list_remove_index');
+ pointer(libvlc_media_list_count):=GetProcAddress(hlib,'libvlc_media_list_count');
+ pointer(libvlc_media_list_item_at_index):=GetProcAddress(hlib,'libvlc_media_list_item_at_index');
+ pointer(libvlc_media_list_index_of_item):=GetProcAddress(hlib,'libvlc_media_list_index_of_item');
+ pointer(libvlc_media_list_is_readonly):=GetProcAddress(hlib,'libvlc_media_list_is_readonly');
+ pointer(libvlc_media_list_lock):=GetProcAddress(hlib,'libvlc_media_list_lock');
+ pointer(libvlc_media_list_unlock):=GetProcAddress(hlib,'libvlc_media_list_unlock');
+ pointer(libvlc_media_list_event_manager):=GetProcAddress(hlib,'libvlc_media_list_event_manager');
+ pointer(libvlc_media_list_player_new):=GetProcAddress(hlib,'libvlc_media_list_player_new');
+ pointer(libvlc_media_list_player_release):=GetProcAddress(hlib,'libvlc_media_list_player_release');
+ pointer(libvlc_media_list_player_retain):=GetProcAddress(hlib,'libvlc_media_list_player_retain');
+ pointer(libvlc_media_list_player_event_manager):=GetProcAddress(hlib,'libvlc_media_list_player_event_manager');
+ pointer(libvlc_media_list_player_set_media_player):=GetProcAddress(hlib,'libvlc_media_list_player_set_media_player');
+ pointer(libvlc_media_list_player_set_media_list):=GetProcAddress(hlib,'libvlc_media_list_player_set_media_list');
+ pointer(libvlc_media_list_player_play):=GetProcAddress(hlib,'libvlc_media_list_player_play');
+ pointer(libvlc_media_list_player_pause):=GetProcAddress(hlib,'libvlc_media_list_player_pause');
+ pointer(libvlc_media_list_player_is_playing):=GetProcAddress(hlib,'libvlc_media_list_player_is_playing');
+ pointer(libvlc_media_list_player_get_state):=GetProcAddress(hlib,'libvlc_media_list_player_get_state');
+ pointer(libvlc_media_list_player_play_item_at_index):=GetProcAddress(hlib,'libvlc_media_list_player_play_item_at_index');
+ pointer(libvlc_media_list_player_play_item):=GetProcAddress(hlib,'libvlc_media_list_player_play_item');
+ pointer(libvlc_media_list_player_stop):=GetProcAddress(hlib,'libvlc_media_list_player_stop');
+ pointer(libvlc_media_list_player_next):=GetProcAddress(hlib,'libvlc_media_list_player_next');
+ pointer(libvlc_media_list_player_previous):=GetProcAddress(hlib,'libvlc_media_list_player_previous');
+ pointer(libvlc_media_list_player_set_playback_mode):=GetProcAddress(hlib,'libvlc_media_list_player_set_playback_mode');
+ pointer(libvlc_media_library_new):=GetProcAddress(hlib,'libvlc_media_library_new');
+ pointer(libvlc_media_library_release):=GetProcAddress(hlib,'libvlc_media_library_release');
+ pointer(libvlc_media_library_retain):=GetProcAddress(hlib,'libvlc_media_library_retain');
+ pointer(libvlc_media_library_load):=GetProcAddress(hlib,'libvlc_media_library_load');
+ pointer(libvlc_media_library_media_list):=GetProcAddress(hlib,'libvlc_media_library_media_list');
+ pointer(libvlc_media_discoverer_new_from_name):=GetProcAddress(hlib,'libvlc_media_discoverer_new_from_name');
+ pointer(libvlc_media_discoverer_release):=GetProcAddress(hlib,'libvlc_media_discoverer_release');
+ pointer(libvlc_media_discoverer_localized_name):=GetProcAddress(hlib,'libvlc_media_discoverer_localized_name');
+ pointer(libvlc_media_discoverer_media_list):=GetProcAddress(hlib,'libvlc_media_discoverer_media_list');
+ pointer(libvlc_media_discoverer_event_manager):=GetProcAddress(hlib,'libvlc_media_discoverer_event_manager');
+ pointer(libvlc_media_discoverer_is_running):=GetProcAddress(hlib,'libvlc_media_discoverer_is_running');
+ pointer(libvlc_vlm_release):=GetProcAddress(hlib,'libvlc_vlm_release');
+ pointer(libvlc_vlm_add_broadcast):=GetProcAddress(hlib,'libvlc_vlm_add_broadcast');
+ pointer(libvlc_vlm_add_vod):=GetProcAddress(hlib,'libvlc_vlm_add_vod');
+ pointer(libvlc_vlm_del_media):=GetProcAddress(hlib,'libvlc_vlm_del_media');
+ pointer(libvlc_vlm_set_enabled):=GetProcAddress(hlib,'libvlc_vlm_set_enabled');
+ pointer(libvlc_vlm_set_output):=GetProcAddress(hlib,'libvlc_vlm_set_output');
+ pointer(libvlc_vlm_set_input):=GetProcAddress(hlib,'libvlc_vlm_set_input');
+ pointer(libvlc_vlm_add_input):=GetProcAddress(hlib,'libvlc_vlm_add_input');
+ pointer(libvlc_vlm_set_loop):=GetProcAddress(hlib,'libvlc_vlm_set_loop');
+ pointer(libvlc_vlm_set_mux):=GetProcAddress(hlib,'libvlc_vlm_set_mux');
+ pointer(libvlc_vlm_change_media):=GetProcAddress(hlib,'libvlc_vlm_change_media');
+ pointer(libvlc_vlm_play_media):=GetProcAddress(hlib,'libvlc_vlm_play_media');
+ pointer(libvlc_vlm_stop_media):=GetProcAddress(hlib,'libvlc_vlm_stop_media');
+ pointer(libvlc_vlm_pause_media):=GetProcAddress(hlib,'libvlc_vlm_pause_media');
+ pointer(libvlc_vlm_seek_media):=GetProcAddress(hlib,'libvlc_vlm_seek_media');
+ pointer(libvlc_vlm_show_media):=GetProcAddress(hlib,'libvlc_vlm_show_media');
+ pointer(libvlc_vlm_get_media_instance_position):=GetProcAddress(hlib,'libvlc_vlm_get_media_instance_position');
+ pointer(libvlc_vlm_get_media_instance_time):=GetProcAddress(hlib,'libvlc_vlm_get_media_instance_time');
+ pointer(libvlc_vlm_get_media_instance_length):=GetProcAddress(hlib,'libvlc_vlm_get_media_instance_length');
+ pointer(libvlc_vlm_get_media_instance_rate):=GetProcAddress(hlib,'libvlc_vlm_get_media_instance_rate');
+ pointer(libvlc_vlm_get_event_manager):=GetProcAddress(hlib,'libvlc_vlm_get_event_manager');
+ pointer(libvlc_playlist_play):=GetProcAddress(hlib,'libvlc_playlist_play');
+end;
+
+
+end.
diff --git a/src/3rdparty/libvlc/vlc.pas b/src/3rdparty/libvlc/vlc.pas
new file mode 100644
index 00000000..0f82b9c0
--- /dev/null
+++ b/src/3rdparty/libvlc/vlc.pas
@@ -0,0 +1,1746 @@
+unit vlc;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, ctypes, libvlc, syncobjs;
+
+Type
+
+ { TVLCLibrary }
+
+ TVLCLibrary = class(TComponent)
+ private
+ FInstance : plibvlc_instance_t;
+ FLibraryArgs: TStrings;
+ FLibraryPath : String;
+ function GetI: Boolean;
+ function GetLastError: String;
+ Function GetVersion : String;
+ Function GetCompiler : String;
+ Function GetChangeSet : String;
+ Procedure SetLibraryPath(Const AValue : String);
+ Protected
+ Function GetInstance : plibvlc_instance_t; virtual;
+ property Instance : plibvlc_instance_t read GetInstance;
+ public
+ constructor Create (AOwner : TComponent); override;
+ destructor Destroy; override;
+ Procedure Initialize;
+ Procedure Release;
+ property LastError : String read GetLastError;
+ property Version : String read GetVersion;
+ property Compiler : String read GetCompiler;
+ property ChangeSer : String read GetChangeSet;
+ property LibraryPath : String read FLibraryPath write SetLibraryPath;
+ Property LibraryArgs : TStrings read FLibraryArgs Write FLibraryArgs;
+ Property Initialized : Boolean Read GetI;
+ end;
+
+ TVLCLibraryClass = Class of TVLCLibrary;
+
+ TCustomVLCMediaPlayer = Class;
+ TVLCMediaItems = Class;
+
+ { TVLCMediaItem }
+ TSnapShotFormat = (ssfPNG,ssfJPG);
+ TDeinterlaceMode = (dmBlend, dmDiscard, dmBob, dmLinear, dmMean, dmX, dmYadif, dmYadif2x);
+
+ TVLCMediaItem = Class(TCollectionItem)
+ private
+ FDIM: TDeinterlaceMode;
+ FInstance : plibvlc_media_t;
+ FOpts : Array [0..3] of Boolean; // Keep in sync with property indexes
+ FPath: String;
+ FSS: TSNapshotFormat;
+ FFD: Integer;
+ function GetInstance: plibvlc_media_t;
+ function GetM(AIndex: Integer): Boolean;
+ function GetMD(AMeta : libvlc_meta_t): String;
+ function GetMRL: String;
+ function GetParsed: Boolean;
+ function GetUD: Pointer;
+ procedure SetDIM(AValue: TDeinterlaceMode);
+ procedure SetFSS(AValue: TSNapshotFormat);
+ procedure SetM(AIndex: Integer; AValue: Boolean);
+ Function GetBoolOpt(AIndex : Integer; AValue : Boolean) : String;
+ procedure SetMD(AMeta : libvlc_meta_t; AValue: String);
+ procedure SetUD(AValue: Pointer);
+ function GetState : libvlc_state_t;
+ function GetDuration : TDateTime;
+ Protected
+ Procedure RegisterInstance;
+ Procedure UnRegisterInstance;
+ procedure SetMRL(AValue: String); virtual;
+ procedure SetPath(AValue: String); virtual;
+ procedure SetFD(AValue: Integer); virtual;
+ Function GetVLC : TVLCLibrary; virtual;
+ function GetEventManager : plibvlc_event_manager_t;
+ Procedure SetInstance( Avalue : plibvlc_media_t);
+ Property Instance : plibvlc_media_t Read GetInstance;
+ Public
+ Destructor Destroy; override;
+ Procedure AddOption(Const AValue : String);
+ procedure Parse;
+ procedure ParseAsync;
+ Procedure SaveMetaData;
+ Function GetStats(Var AStats : libvlc_media_stats_t) : Boolean;
+ Function Duplicate : TVLCMediaItem;
+ Property Parsed : Boolean Read GetParsed;
+ Property ShowTitle : Boolean Index 0 Read GetM Write SetM;
+ Property VideoOnTop : Boolean Index 1 Read GetM Write SetM;
+ Property UseOverlay : Boolean Index 2 Read GetM Write SetM;
+ Property FullScreen : Boolean Index 3 Read GetM Write SetM;
+ Property DeinterlaceFilter : Boolean Index 4 Read GetM Write SetM;
+ Property DeInterlaceMode : TDeinterlaceMode Read FDIM Write SetDIM;
+ Property SnapShotFormat : TSNapshotFormat Read FSS Write SetFSS;
+ Property UserData : Pointer Read GetUD Write SetUD;
+ Property State : libvlc_state_t Read GetState;
+ Property Duration : TDateTime Read GetDuration;
+ Property MetaData[AMeta : libvlc_meta_t] : String Read GetMD Write SetMD;
+ // These must be set prior to using any of the above.
+ Property MRL : String Read GetMRL Write SetMRL;
+ Property Path : String Read FPath Write SetPath;
+ property FileDescriptor : Integer Read FFD Write SetFD;
+ end;
+
+ TVLCMediaItemClass = Class of TVLCMediaItem;
+
+ { TVLCMediaItems }
+ TVLCPlayMode = (pmNormal,pmLoop,pmRepeat);
+
+ TVLCMediaItems = Class(TCollection)
+ Private
+ FPlayer: TCustomVLCMediaPlayer;
+ FPlayMode: TVLCPlayMode;
+ FVLC : TVLCLibrary;
+ FInstance : Plibvlc_media_list_t;
+ function GetI(AIndex : Integer): TVLCMediaItem;
+ function GetInstance: Plibvlc_media_list_t;
+ function GetIsReadOnly: Boolean;
+ procedure SetI(AIndex : Integer; AValue: TVLCMediaItem);
+ Protected
+ Function GetVLC : TVLCLibrary; virtual;
+ Public
+ Constructor Create(ALibrary : TVLCLibrary;AItemClass: TVLCMediaItemClass = Nil); overload;
+ Constructor Create(AInstance : Plibvlc_media_list_t;AItemClass: TVLCMediaItemClass = Nil); overload;
+ Procedure Lock;
+ Procedure Unlock;
+ Property Instance : Plibvlc_media_list_t read GetInstance;
+ Property VLC : TVLCLibrary Read GetVLC Write FVLC;
+ Property MediaItems[AIndex : Integer] : TVLCMediaItem Read GetI Write SetI; default;
+ Property ReadOnly : Boolean Read GetIsReadOnly;
+ end;
+
+ { TCustomVLCMediaPlayer }
+ TBooleanEvent = procedure(Sender : TObject; Const AValue : Boolean) of object;
+ TTitleEvent = procedure(Sender : TObject; Const ATitle : Integer) of object;
+ TSnapshotEvent = procedure(Sender : TObject; Const AfileName : string) of object;
+ TErrorEvent = procedure(Sender : TObject; Const AError : string) of object;
+ TTimeEvent = procedure(Sender : TObject; Const time : TDateTime) of object;
+ TPositionEvent = procedure(Sender : TObject; Const APos : Double) of object;
+
+ TCustomVLCMediaPlayer = Class(TComponent)
+ private
+ FFitWindow: Boolean;
+ FOnBackward: TNotifyEvent;
+ FOnBuffering: TNotifyEvent;
+ FOnEOF: TNotifyEvent;
+ FOnError: TErrorEvent;
+ FOnForward: TNotifyEvent;
+ FOnLengthChanged: TTimeEvent;
+ FOnMediaChanged: TNotifyEvent;
+ FOnNothingSpecial: TNotifyEvent;
+ FOnOpening: TNotifyEvent;
+ FOnPausableChanged: TBooleanEvent;
+ FOnPause: TNotifyEvent;
+ FOnPlaying: TNotifyEvent;
+ FOnPositionChanged: TPositionEvent;
+ FOnSeekableChanged: TBooleanEvent;
+ FOnSnapShot: TSnapShotEvent;
+ FOnStop: TNotifyEvent;
+ FOnTimeChanged: TTimeEvent;
+ FOnTitleChanged: TTitleEvent;
+ FUseEvents: Boolean;
+ Finstance : Plibvlc_media_player_t;
+ FVLC: TVLCLibrary;
+ FECS : TCriticalSection;
+ function GetAspectRatio: String;
+ function GetAudioMuted: Boolean;
+ function GetAudioTrack: Integer;
+ function GetHaveInstance: Boolean;
+ function GetState: libvlc_state_t;
+ function GetVideoDuration: TDateTime;
+ function GetVideoFPS: Double;
+ function GetVideoFractional: Double;
+ function GetVideoHeight: Cardinal;
+ function GetVideoLength: Int64;
+ function GetVideoPos: Int64;
+ function GetVideoScale: Double;
+ function GetVideoWidth: Cardinal;
+ function GetVLC: TVLCLibrary;
+ procedure SetAspectRatio(AValue: String);
+ procedure SetAudioMuted(AValue: Boolean);
+ procedure SetFitWindow(AValue: Boolean);
+ procedure SetUseEVents(AValue: Boolean);
+ function GetAudioTrackCount : Integer;
+ procedure SetAudioTrack(AValue: Integer);
+ function GetAudioTrackDescriptions(AIndex : Integer) : String;
+ function GetChannel: Integer;
+ procedure SetChannel(AValue : Integer);
+ function GetAudioDelay : Int64;
+ procedure SetAudioDelay (AValue: Int64);
+ function GetPlaying : Boolean;
+ function GetChapter : Integer;
+ procedure SetChapter(AValue : Integer);
+ function GetChapterCount: Integer;
+ Function GetPlayable : Boolean;
+ Function GetPausable : Boolean;
+ Function GetSeekable : Boolean;
+ function GetAudioVolume : Integer;
+ function GetPlayRate: Integer;
+ procedure SetAudioVolume(AValue : Integer);
+ procedure SetPlayRate(AValue: Integer);
+ procedure SetFullScreenMode(AValue: Boolean);
+ function GetFullScreenMode: Boolean;
+ procedure SetVideoFractional(AValue: Double);
+ procedure SetVideoPos(AValue: Int64);
+ procedure SetVideoScale(AValue: Double);
+ Protected
+ function GetInstance: Plibvlc_media_player_t; virtual;
+ // Called to set parent window. Descendents must override this.
+ Procedure SetParentWindow; virtual;
+ // Called when FitWindow is true.
+ Procedure SetParentWindowSize(AWidth,AHeight : Cardinal); Virtual;
+ procedure DoMediaChanged; virtual;
+ procedure DoNothingSpecial; virtual;
+ procedure DoOnBackward; virtual;
+ procedure DoOnBuffering;virtual;
+ procedure DoOnEOF;virtual;
+ procedure DoOnError;virtual;
+ procedure DoOnForward;virtual;
+ procedure DoOnOpening;virtual;
+ procedure DoOnPause;virtual;
+ procedure DoOnPlaying;virtual;
+ procedure DoOnStop;virtual;
+ procedure DoOnLengthChanged(const ATime: libvlc_time_t); virtual;
+ procedure DoOnPausableChanged(const APausable: Boolean); virtual;
+ procedure DoOnPositionChanged(const Aposition: Double); virtual;
+ procedure DoOnSeekableChanged(const ASeekable: Boolean); virtual;
+ procedure DoOnTimeChanged(const ATime: libvlc_time_t); virtual;
+ procedure DoOnTitleChanged(const ATitle: cint); virtual;
+ procedure DoOnSnapshot(const AFileName: PCChar); virtual;
+ procedure HookupEvents; virtual;
+ procedure UnHookEvents; virtual;
+ procedure HandleVLCEvent(e: Plibvlc_event_t); virtual;
+ Property VLC : TVLCLibrary Read GetVLC Write FVLC;
+ Property Instance : Plibvlc_media_player_t Read GetInstance;
+ Property HaveInstance : Boolean Read GetHaveInstance;
+ Public
+ Destructor Destroy; override;
+ procedure Play;
+ procedure SetMedia(M: TVLCMediaItem);
+ Procedure Play(M : TVLCMediaItem);
+ Procedure PlayFile(Const AFileName : String);
+ Procedure Stop;
+ procedure Pause;
+ procedure Resume;
+ procedure NextFrame;
+ function Snapshot(Const AFileName: String): Boolean;
+ function Snapshot(Const AFileName: String; AWidth, AHeight: Cardinal): Boolean;
+ function GetVideoSize(Var AWidth, AHeight: Cardinal): Boolean;
+ // These can be made public/published in descendents
+ Protected
+ Property Playable : Boolean Read GetPlayable;
+ Property Pausable : Boolean Read GetPausable;
+ Property Seekable : Boolean Read GetSeekable;
+ Property Playing : Boolean Read GetPlaying;
+ Property State : libvlc_state_t Read GetState;
+ Property AudioTrackDescriptions [AIndex : Integer] : String Read GetAudioTrackDescriptions;
+ Property ChapterCount : Integer Read GetChapterCount;
+ Property AudioTrackCount : Integer Read GetAudioTrackCount;
+ Property AudioTrack : Integer Read GetAudioTrack Write SetAudioTrack;
+ Property AudioDelay : Int64 Read GetAudioDelay Write SetAudioDelay;
+ Property AudioVolume : Integer Read GetAudioVolume Write SetAudioVolume;
+ Property AudioMuted : Boolean Read GetAudioMuted Write SetAudioMuted;
+ Property FitWindow : Boolean Read FFitWindow Write SetFitWindow;
+ Property VideoWidth : Cardinal Read GetVideoWidth;
+ Property VideoHeight : Cardinal Read GetVideoHeight;
+ // In MS.
+ Property VideoLength : Int64 Read GetVideoLength;
+ Property VideoDuration : TDateTime Read GetVideoDuration;
+ // In MS
+ Property VideoPosition : Int64 Read GetVideoPos Write SetVideoPos;
+ Property VideoFractionalPosition : Double Read GetVideoFractional Write SetVideoFractional;
+ Property VideoFramesPerSecond : Double Read GetVideoFPS;
+ Property VideoScale : Double Read GetVideoScale Write SetVideoScale;
+ Property AspectRatio : String Read GetAspectRatio Write SetAspectRatio;
+ Property Channel : Integer Read GetChannel Write SetChannel;
+ Property Chapter : Integer Read GetChapter Write SetChapter;
+ Property FullScreenMode : Boolean Read GetFullScreenMode Write SetFullScreenMode;
+ Property UseEvents : Boolean Read FUseEvents Write SetUseEVents;
+ // Events from VLC player
+ Property OnMediaChanged : TNotifyEvent Read FOnMediaChanged Write FOnMediaChanged;
+ Property OnNothingSpecial : TNotifyEvent Read FOnNothingSpecial Write FOnNothingSpecial;
+ Property OnBackward : TNotifyEvent Read FOnBackward Write FOnBackward;
+ Property OnBuffering : TNotifyEvent Read FOnBuffering Write FOnBuffering;
+ Property OnEOF : TNotifyEvent Read FOnEOF Write FOnEOF;
+ Property OnError : TErrorEvent Read FOnError Write FOnError;
+ Property OnForward : TNotifyEvent Read FOnForward Write FOnForward;
+ Property OnOpening : TNotifyEvent Read FOnOpening Write FOnOpening;
+ Property OnPause : TNotifyEvent Read FOnPause Write FOnPause;
+ Property OnPlaying : TNotifyEvent Read FOnPlaying Write FOnPlaying;
+ Property OnStop : TNotifyEvent Read FOnStop Write FOnStop;
+ Property OnLengthChanged : TTimeEvent Read FOnLengthChanged Write FOnLengthChanged;
+ Property OnTimeChanged : TTimeEvent Read FOnTimeChanged Write FOnTimeChanged;
+ Property OnPausableChanged : TBooleanEvent Read FOnPausableChanged Write FOnPausableChanged;
+ Property OnPositionChanged : TPositionEvent Read FOnPositionChanged Write FOnPositionChanged;
+ Property OnSeekableChanged : TBooleanEvent Read FOnSeekableChanged Write FOnSeekableChanged;
+ Property OnTitleChanged : TTitleEvent Read FOnTitleChanged Write FOnTitleChanged;
+ Property OnSnapshot : TSnapShotEvent Read FOnSnapShot Write FOnSnapShot;
+ end;
+
+ EVLC = Class(Exception);
+
+ TVLCMediaPlayer = Class(TCustomVLCMediaPlayer)
+ Public
+ Property Playable ;
+ Property Pausable ;
+ Property Seekable ;
+ Property PLaying ;
+ Property State ;
+ Property AudioTrackDescriptions;
+ Property ChapterCount ;
+ Property AudioTrackCount ;
+ Property AudioTrack ;
+ Property VideoWidth ;
+ Property VideoHeight;
+ Property VideoLength;
+ Property VideoDuration ;
+ Property VideoPosition ;
+ Property VideoFractionalPosition ;
+ Property VideoFramesPerSecond;
+ Property VideoScale : Double;
+ Property AspectRatio : String;
+ Published
+ Property AudioDelay ;
+ Property AudioVolume ;
+ Property AudioMuted ;
+ Property Channel ;
+ Property Chapter ;
+ Property FitWindow;
+ Property FullScreenMode ;
+ Property UseEvents ;
+ Property OnMediaChanged ;
+ Property OnNothingSpecial ;
+ Property OnBackward ;
+ Property OnBuffering ;
+ Property OnEOF ;
+ Property OnError ;
+ Property OnForward ;
+ Property OnOpening ;
+ Property OnPause ;
+ Property OnPlaying ;
+ Property OnStop ;
+ Property OnLengthChanged ;
+ Property OnTimeChanged ;
+ Property OnPausableChanged ;
+ Property OnPositionChanged ;
+ Property OnSeekableChanged ;
+ Property OnTitleChanged ;
+ Property OnSnapshot ;
+ end;
+
+ { TCustomVLCMediaListPlayer }
+
+ TCustomVLCMediaListPlayer = Class(TComponent)
+ Private
+ FMediaItems: TVLCMediaItems;
+ FPlayer: TCustomVLCMediaPlayer;
+ FPlayMode: TVLCPlayMode;
+ FInstance : plibvlc_media_list_player_t;
+ FVLC: TVLCLibrary;
+ function GetInstance: plibvlc_media_list_player_t;
+ function GetPlaying : Boolean;
+ function GetState: libvlc_state_t;
+ function GetVLC: TVLCLibrary;
+ procedure SetMediaItems(AValue: TVLCMediaItems);
+ procedure SetPlayer(AValue: TCustomVLCMediaPlayer); virtual;
+ procedure SetPlayMode(AValue: TVLCPlayMode);
+ Protected
+ Function CreateMediaItems : TVLCMediaItems; virtual;
+ Property Instance : plibvlc_media_list_player_t Read GetInstance;
+ Property Player : TCustomVLCMediaPlayer Read FPlayer write SetPlayer;
+ Property PlayMode : TVLCPlayMode read FPlayMode write SetPlayMode;
+ Property Playing : Boolean Read GetPLaying;
+ Property State : libvlc_state_t Read GetState;
+ Property MediaItems : TVLCMediaItems Read FMediaItems Write SetMediaItems;
+ Property VLC : TVLCLibrary Read GetVLC Write FVLC;
+ Public
+ Constructor Create(AOwner : TComponent); override;
+ Destructor Destroy; override;
+ procedure Play(Item : TVLCMediaItem);
+ procedure Play;
+ procedure Pause;
+ procedure Stop;
+ procedure Next;
+ procedure Prev;
+ end;
+
+ TVLCMediaListPlayer = Class(TCustomVLCMediaListPlayer)
+ Public
+ Property VLC : TVLCLibrary;
+ Published
+ Property Player;
+ Property PlayMode;
+ Property Playing;
+ Property State;
+ Property MediaItems;
+ end;
+
+Function VLCLibrary : TVLCLibrary;
+
+Var
+ VLCLibraryClass : TVLCLibraryClass = TVLCLibrary;
+
+Function VLCTimeToDateTime (T : libvlc_time_t) : TDateTime;
+
+implementation
+
+{ TVLCLibrary }
+Var
+ LVLC : TVLCLibrary;
+
+Function VLCLibrary : TVLCLibrary;
+
+begin
+ If LVLC=Nil then
+ LVLC:=VLCLibraryClass.Create(Nil);
+ Result:=LVLC;
+end;
+
+Procedure DoneVLC;
+
+begin
+ If Assigned(LVLC) then
+ FreeAndNil(LVLC);
+end;
+
+Function VLCTimeToDateTime (T : libvlc_time_t) : TDateTime;
+
+ Function MD(Var MS : libvlc_time_t; D : Integer) : Word; inline;
+
+ begin
+ Result:=MS Mod D;
+ MS:=MS div D;
+ end;
+
+var
+ d,h,m,s,ms: word;
+
+begin
+ ms:=MD(T,1000);
+ s:=MD(T,60);
+ m:=MD(T,60);
+ h:=MD(T,24);
+ d:=T;
+ Result:=D+EncodeTime(h,m,s,ms);
+end;
+
+procedure PlayerEventHelper(event: Plibvlc_event_t; data: Pointer); cdecl;
+
+begin
+ if Not Assigned(data) then
+ exit;
+ TCustomVLCMediaPlayer(data).HandleVLCEvent(event);
+end;
+
+{ TCustomVLCMediaListPlayer }
+
+function TCustomVLCMediaListPlayer.GetPlaying: Boolean;
+begin
+ Result:=libvlc_media_list_player_is_playing(Instance)<>0;
+end;
+
+function TCustomVLCMediaListPlayer.GetInstance: plibvlc_media_list_player_t;
+begin
+ if (FInstance=Nil) then
+ begin
+ Finstance:=libvlc_media_list_player_new(VLC.Instance);
+ if Assigned(MediaItems) then
+ begin
+ libvlc_media_list_player_set_media_list(FInstance,MediaItems.Instance);
+ end;
+ If Assigned(FPlayer) then
+ begin
+ libvlc_media_list_player_set_media_player(FInstance, FPlayer.Instance);
+ end;
+ end;
+ Result:=FInstance;
+end;
+
+function TCustomVLCMediaListPlayer.GetState: libvlc_state_t;
+begin
+ Result:=libvlc_media_list_player_get_state(Instance)
+end;
+
+function TCustomVLCMediaListPlayer.GetVLC: TVLCLibrary;
+begin
+ Result:=FVLC;
+ If Result=Nil then
+ Result:=VLCLibrary;
+end;
+
+procedure TCustomVLCMediaListPlayer.Play(Item: TVLCMediaItem);
+begin
+ libvlc_media_list_player_play_item(Instance, item.Instance);
+end;
+
+procedure TCustomVLCMediaListPlayer.SetMediaItems(AValue: TVLCMediaItems);
+begin
+ if FMediaItems=AValue then Exit;
+ FMediaItems.Assign(AValue);
+end;
+
+procedure TCustomVLCMediaListPlayer.SetPlayer(AValue: TCustomVLCMediaPlayer);
+begin
+ if FPlayer=AValue then Exit;
+ FPlayer:=AValue;
+ If Assigned(FInstance) then
+ begin
+ libvlc_media_list_player_set_media_player(FInstance, FPlayer.Instance);
+ end;
+end;
+
+procedure TCustomVLCMediaListPlayer.SetPlayMode(AValue: TVLCPlayMode);
+Const
+ M : Array [TVLCPlayMode] of libvlc_playback_mode_t
+ = (libvlc_playback_mode_default,
+ libvlc_playback_mode_loop,
+ libvlc_playback_mode_repeat);
+
+begin
+ if FPlayMode=AValue then Exit;
+ FPlayMode:=AValue;
+ libvlc_media_list_player_set_playback_mode(FInstance, M[AValue]);
+end;
+
+function TCustomVLCMediaListPlayer.CreateMediaItems: TVLCMediaItems;
+begin
+ Result:=TVLCMediaItems.Create(TVLCMediaItem);
+end;
+
+constructor TCustomVLCMediaListPlayer.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FMediaItems:=CreateMediaItems;
+end;
+
+destructor TCustomVLCMediaListPlayer.Destroy;
+begin
+ If Assigned(Finstance) then
+ libvlc_media_list_player_release(FInstance);
+ FreeAndNil(FMediaItems);
+ inherited Destroy;
+end;
+
+procedure TCustomVLCMediaListPlayer.Play;
+begin
+ libvlc_media_list_player_play(Instance);
+end;
+
+procedure TCustomVLCMediaListPlayer.Pause;
+begin
+ libvlc_media_list_player_pause(Instance);
+end;
+
+procedure TCustomVLCMediaListPlayer.Stop;
+begin
+ libvlc_media_list_player_stop(Instance);
+end;
+
+procedure TCustomVLCMediaListPlayer.Next;
+begin
+ libvlc_media_list_player_next(Instance);
+end;
+
+procedure TCustomVLCMediaListPlayer.Prev;
+begin
+ libvlc_media_list_player_previous(Instance);
+end;
+
+
+{ TCustomVLCMediaPlayer }
+
+function TCustomVLCMediaPlayer.GetVLC: TVLCLibrary;
+begin
+ Result:=FVLC;
+ if Result=Nil then
+ Result:=VLCLibrary;
+end;
+
+procedure TCustomVLCMediaPlayer.SetAspectRatio(AValue: String);
+
+begin
+ libvlc_video_set_aspect_ratio(Instance,Pcchar(PChar(AValue)));
+end;
+
+function TCustomVLCMediaPlayer.GetAudioMuted: Boolean;
+begin
+ if Assigned(Finstance) then
+ Result:=libvlc_audio_get_mute(instance)<>0
+ else
+ Result:=False;
+end;
+
+function TCustomVLCMediaPlayer.GetAspectRatio: String;
+
+Var
+ P : Pcchar;
+
+begin
+ P:=libvlc_video_get_aspect_ratio(Instance);
+ if (P<>Nil) then
+ Result:=StrPas(PChar(P))
+ else
+ Result:='';
+end;
+
+function TCustomVLCMediaPlayer.GetAudioTrack: Integer;
+begin
+ if Assigned(FInstance) then
+ Result := libvlc_audio_get_track(FINstance)
+ else
+ Result:=-1;
+end;
+
+function TCustomVLCMediaPlayer.GetHaveInstance: Boolean;
+begin
+ Result:=(FInstance<>Nil);
+end;
+
+function TCustomVLCMediaPlayer.GetState: libvlc_state_t;
+begin
+ If Assigned(FInstance) then
+ Result:=libvlc_media_player_get_state(FInstance)
+ else
+ Result:=libvlc_NothingSpecial;
+end;
+
+function TCustomVLCMediaPlayer.GetVideoDuration: TDateTime;
+begin
+ Result:=VLCTimeToDateTime(GetVideoLength);
+end;
+
+function TCustomVLCMediaPlayer.GetVideoFPS: Double;
+begin
+ Result:=libvlc_media_player_get_fps(FInstance);
+end;
+
+function TCustomVLCMediaPlayer.GetVideoFractional: Double;
+begin
+ Result:=libvlc_media_player_get_Position(FInstance);
+end;
+
+function TCustomVLCMediaPlayer.GetVideoHeight: Cardinal;
+begin
+ Result:=libvlc_video_get_height(FInstance);
+end;
+
+function TCustomVLCMediaPlayer.GetVideoLength: Int64;
+begin
+ Result:=libvlc_media_player_get_length(Finstance);
+end;
+
+function TCustomVLCMediaPlayer.GetVideoPos: Int64;
+begin
+ Result:=libvlc_media_player_get_time(FInstance);
+end;
+
+function TCustomVLCMediaPlayer.GetVideoScale: Double;
+begin
+ Result:=libvlc_video_get_scale(Finstance);
+end;
+
+function TCustomVLCMediaPlayer.GetVideoWidth: Cardinal;
+begin
+ Result:=libvlc_video_get_width(FInstance);
+end;
+
+
+procedure TCustomVLCMediaPlayer.SetAudioMuted(AValue: Boolean);
+begin
+ libvlc_audio_set_mute(instance, ord(AValue));
+end;
+
+procedure TCustomVLCMediaPlayer.SetFitWindow(AValue: Boolean);
+
+Var
+ W,H : Cardinal;
+
+begin
+ if FFitWindow=AValue then Exit;
+ FFitWindow:=AValue;
+ If FFitWindow and Playing then
+ begin
+ if GetVideoSize(W,H) then
+ SetParentWindowSize(W,H);
+ end;
+end;
+
+procedure TCustomVLCMediaPlayer.SetUseEVents(AValue: Boolean);
+begin
+ if FUseEvents=AValue then Exit;
+ FUseEvents:=AValue;
+ If Assigned(Finstance) then
+ If AValue then
+ HookupEvents
+ else
+ UnhookEvents;
+end;
+
+function TCustomVLCMediaPlayer.GetAudioTrackCount: Integer;
+begin
+ if Assigned(FInstance) then
+ Result := libvlc_audio_get_track_count(FINstance)
+ else
+ Result:=-1;
+end;
+
+
+procedure TCustomVLCMediaPlayer.SetAudioTrack(AValue: Integer);
+begin
+ if Assigned(FInstance) then
+ begin
+ if (AValue<0) then
+ AValue:=0;
+ libvlc_audio_set_track(FInstance,AValue);
+ end;
+end;
+
+function TCustomVLCMediaPlayer.GetAudioTrackDescriptions(AIndex: Integer): String;
+
+var
+ t : plibvlc_track_description_t;
+
+begin
+ Result := '';
+ If (AIndex>=0) And Assigned(FInstance) then
+ begin
+ T:=libvlc_audio_get_track_description(Finstance);
+ while (AIndex>0) and Assigned(t) do
+ begin
+ Dec(Aindex);
+ t:=t^.p_next;
+ end;
+ If Assigned(t) and Assigned(t^.psz_name) then
+ Result:=StrPas(PChar(t^.psz_name));
+ end;
+end;
+
+function TCustomVLCMediaPlayer.GetChannel: Integer;
+begin
+ If Assigned(Finstance) then
+ Result:=libvlc_audio_get_channel(FInstance)
+ else
+ Result:=-1;
+end;
+
+procedure TCustomVLCMediaPlayer.SetChannel(AValue: Integer);
+begin
+ If Assigned(Finstance) then
+ libvlc_audio_set_channel(Finstance,AValue)
+end;
+
+function TCustomVLCMediaPlayer.GetAudioDelay: Int64;
+begin
+ if Assigned(FInstance) then
+ Result:=libvlc_audio_get_delay(FInstance)
+ else
+ Result:=-1;
+end;
+
+procedure TCustomVLCMediaPlayer.SetAudioDelay(AValue: Int64);
+begin
+ if Assigned(FInstance) then
+ libvlc_audio_set_delay(FInstance,AValue)
+end;
+
+function TCustomVLCMediaPlayer.GetPlaying: Boolean;
+begin
+ Result:=(State=libvlc_Playing);
+end;
+
+function TCustomVLCMediaPlayer.GetChapter: Integer;
+begin
+ if Assigned(FInstance) then
+ Result:=libvlc_media_player_get_chapter(FInstance)
+ else
+ Result:=-1;
+end;
+
+procedure TCustomVLCMediaPlayer.SetChapter(AValue: Integer);
+begin
+ if Assigned(FInstance) then
+ libvlc_media_player_set_chapter(FInstance,AValue);
+end;
+
+function TCustomVLCMediaPlayer.GetChapterCount: Integer;
+begin
+ if Assigned(FInstance) then
+ Result:=libvlc_media_player_get_chapter_count(FInstance)
+ else
+ Result:=-1;
+end;
+
+function TCustomVLCMediaPlayer.GetPlayable: Boolean;
+begin
+ if Assigned(FInstance) then
+ Result:=(libvlc_media_player_will_play(FInstance)<>0)
+ else
+ Result:=False
+end;
+
+function TCustomVLCMediaPlayer.GetPausable: Boolean;
+begin
+ if Assigned(FInstance) then
+ Result:=(libvlc_media_player_can_pause(FInstance)<>0)
+ else
+ Result:=False
+end;
+
+function TCustomVLCMediaPlayer.GetSeekable: Boolean;
+begin
+ if Assigned(FInstance) then
+ Result:=(libvlc_media_player_is_seekable(FInstance)<>0)
+ else
+ Result:=False
+end;
+
+function TCustomVLCMediaPlayer.GetAudioVolume: Integer;
+begin
+ if Assigned(FInstance) then
+ Result:=libvlc_audio_get_volume(FInstance)
+ else
+ Result:=-1
+end;
+
+procedure TCustomVLCMediaPlayer.SetAudioVolume(AValue: Integer);
+begin
+ if Assigned(FInstance) then
+ begin
+ if (AValue<0) then
+ AValue:=0
+ else if (AValue>200) then
+ AValue:=200;
+ libvlc_audio_set_volume(Finstance,AValue);
+ end;
+end;
+
+procedure TCustomVLCMediaPlayer.SetPlayRate(Avalue : Integer);
+begin
+ if Assigned(FInstance) then
+ begin
+ if (Avalue< 1) then
+ AValue:=1
+ else if (AValue>1000) then
+ AValue:=1000;
+ libvlc_media_player_set_rate(FInstance,AValue/100);
+ end;
+end;
+
+function TCustomVLCMediaPlayer.GetPlayRate: Integer;
+begin
+ if Assigned(FInstance) then
+ Result:=Round(libvlc_media_player_get_rate(FInstance)*100)
+ else
+ Result:=-1;
+end;
+
+procedure TCustomVLCMediaPlayer.SetFullScreenMode(AValue: Boolean);
+begin
+ if Assigned(FInstance) then
+ libvlc_set_fullscreen(Finstance,Ord(AValue));
+end;
+
+function TCustomVLCMediaPlayer.GetFullScreenMode: Boolean;
+begin
+ If Assigned(FInstance) then
+ Result:=libvlc_get_fullscreen(Finstance)<>0
+ else
+ Result:=False;
+end;
+
+procedure TCustomVLCMediaPlayer.SetVideoFractional(AValue: Double);
+begin
+ libvlc_media_player_set_position(FInstance,AValue);
+end;
+
+procedure TCustomVLCMediaPlayer.SetVideoPos(AValue: Int64);
+begin
+ libvlc_media_player_set_time(FInstance,AVAlue);
+end;
+
+procedure TCustomVLCMediaPlayer.SetVideoScale(AValue: Double);
+begin
+ libvlc_video_set_scale(Finstance,AVAlue);
+end;
+
+function TCustomVLCMediaPlayer.GetInstance: Plibvlc_media_player_t;
+begin
+ Result:=FInstance;
+ if (FInstance=Nil) then
+ begin
+ FInstance:=libvlc_media_player_new(VLC.Instance);
+ libvlc_video_set_mouse_input(FInstance,1);
+ libvlc_video_set_key_input(FInstance,1);
+ if FUseEvents then
+ HookupEvents;
+ end;
+ Result:=FInstance;
+end;
+
+procedure TCustomVLCMediaPlayer.SetParentWindow;
+begin
+ // Do nothing
+end;
+
+procedure TCustomVLCMediaPlayer.SetParentWindowSize(AWidth, AHeight: Cardinal);
+begin
+ // Do nothing
+end;
+
+Procedure TCustomVLCMediaPlayer.UnHookEvents;
+
+
+ Procedure ClearEvent(M : plibvlc_event_manager_t;t : libvlc_event_e);
+
+ begin
+ libvlc_event_detach(M,ord(t),@PlayerEventHelper,Self);
+ end;
+
+Var
+ M : plibvlc_event_manager_t;
+
+begin
+ M:=libvlc_media_player_event_manager(Instance);
+ if (M<>Nil) then
+ begin
+ ClearEvent(M,libvlc_MediaPlayerMediaChanged);
+ ClearEvent(M,libvlc_MediaPlayerNothingSpecial);
+ ClearEvent(M,libvlc_MediaPlayerOpening);
+ ClearEvent(M,libvlc_MediaPlayerBuffering);
+ ClearEvent(M,libvlc_MediaPlayerPlaying);
+ ClearEvent(M,libvlc_MediaPlayerPaused);
+ ClearEvent(M,libvlc_MediaPlayerStopped);
+ ClearEvent(M,libvlc_MediaPlayerForward);
+ ClearEvent(M,libvlc_MediaPlayerBackward);
+ ClearEvent(M,libvlc_MediaPlayerEndReached);
+ ClearEvent(M,libvlc_MediaPlayerEncounteredError);
+ ClearEvent(M,libvlc_MediaPlayerTimeChanged);
+ ClearEvent(M,libvlc_MediaPlayerPositionChanged);
+ ClearEvent(M,libvlc_MediaPlayerSeekableChanged);
+ ClearEvent(M,libvlc_MediaPlayerPausableChanged);
+ ClearEvent(M,libvlc_MediaPlayerTitleChanged);
+ ClearEvent(M,libvlc_MediaPlayerSnapshotTaken);
+ ClearEvent(M,libvlc_MediaPlayerLengthChanged);
+ FreeAndNil(FECS);
+ end;
+end;
+
+Procedure TCustomVLCMediaPlayer.HookupEvents;
+
+ Procedure AttachEvent( M : plibvlc_event_manager_t;t : libvlc_event_e);
+
+ begin
+ libvlc_event_attach(M,ord(t),@PlayerEventHelper,Self);
+ end;
+
+Var
+ M : plibvlc_event_manager_t;
+
+begin
+ M:=libvlc_media_player_event_manager(Instance);
+ if (M<>Nil) then
+ begin
+ FECS:=TCriticalSection.Create;
+ AttachEvent(M,libvlc_MediaPlayerMediaChanged);
+ AttachEvent(M,libvlc_MediaPlayerNothingSpecial);
+ AttachEvent(M,libvlc_MediaPlayerOpening);
+ AttachEvent(M,libvlc_MediaPlayerBuffering);
+ AttachEvent(M,libvlc_MediaPlayerPlaying);
+ AttachEvent(M,libvlc_MediaPlayerPaused);
+ AttachEvent(M,libvlc_MediaPlayerStopped);
+ AttachEvent(M,libvlc_MediaPlayerForward);
+ AttachEvent(M,libvlc_MediaPlayerBackward);
+ AttachEvent(M,libvlc_MediaPlayerEndReached);
+ AttachEvent(M,libvlc_MediaPlayerEncounteredError);
+ AttachEvent(M,libvlc_MediaPlayerTimeChanged);
+ AttachEvent(M,libvlc_MediaPlayerPositionChanged);
+ AttachEvent(M,libvlc_MediaPlayerSeekableChanged);
+ AttachEvent(M,libvlc_MediaPlayerPausableChanged);
+ AttachEvent(M,libvlc_MediaPlayerTitleChanged);
+ AttachEvent(M,libvlc_MediaPlayerSnapshotTaken);
+ AttachEvent(M,libvlc_MediaPlayerLengthChanged);
+ end;
+end;
+
+procedure TCustomVLCMediaPlayer.DoMediaChanged;
+
+begin
+ If Assigned(FOnMediaChanged) then
+ FOnMediaChanged(Self);
+end;
+
+procedure TCustomVLCMediaPlayer.DoNothingSpecial;
+
+begin
+ If Assigned(FOnNothingSpecial) then
+ FOnNothingSpecial(Self);
+end;
+
+procedure TCustomVLCMediaPlayer.DoOnOpening;
+
+begin
+ If Assigned(FOnOpening) then
+ FOnOpening(Self);
+end;
+
+procedure TCustomVLCMediaPlayer.DoOnPlaying;
+
+begin
+ If Assigned(FOnPlaying) then
+ FOnPlaying(Self);
+end;
+
+procedure TCustomVLCMediaPlayer.DoOnPause;
+
+begin
+ If Assigned(FOnPause) then
+ FOnPause(Self);
+end;
+
+
+procedure TCustomVLCMediaPlayer.DoOnStop;
+
+begin
+ If Assigned(FOnStop) then
+ FOnStop(Self);
+end;
+
+
+procedure TCustomVLCMediaPlayer.DoOnForward;
+
+begin
+ If Assigned(FOnForward) then
+ FOnForward(Self);
+end;
+
+
+procedure TCustomVLCMediaPlayer.DoOnBackward;
+
+begin
+ If Assigned(FOnBackward) then
+ FOnBackward(Self);
+end;
+
+procedure TCustomVLCMediaPlayer.DoOnEOF;
+
+begin
+ If Assigned(FOnEOF) then
+ FOnEOF(Self);
+end;
+
+procedure TCustomVLCMediaPlayer.DoOnBuffering;
+
+begin
+ If Assigned(FOnBuffering) then
+ FOnBuffering(Self);
+end;
+
+procedure TCustomVLCMediaPlayer.DoOnError;
+
+Var
+ P : pcchar;
+ E : String;
+begin
+ p:=libvlc_errmsg();
+ if p<>Nil then
+ E:=StrPas(PChar(P))
+ else
+ E:='';
+ If Assigned(FOnError) then
+ FOnError(Self,E);
+end;
+
+procedure TCustomVLCMediaPlayer.DoOnTimeChanged(Const ATime: libvlc_time_t);
+
+begin
+ If Assigned(FOnTimeChanged) then
+ FOnTimeChanged(Self,VLCTimeToDateTime(ATime));
+end;
+
+procedure TCustomVLCMediaPlayer.DoOnPositionChanged(Const Aposition: Double);
+
+begin
+ If Assigned(FOnPositionChanged) then
+ FOnPositionChanged(Self,APosition);
+end;
+
+
+procedure TCustomVLCMediaPlayer.DoOnSeekableChanged(Const ASeekable : Boolean);
+
+begin
+ If Assigned(FOnSeekableChanged) then
+ FOnSeekableChanged(Self,ASeekable);
+end;
+
+procedure TCustomVLCMediaPlayer.DoOnPausableChanged(Const APausable : Boolean);
+
+begin
+ If Assigned(FOnPausableChanged) then
+ FOnPausableChanged(Self,APausable);
+end;
+
+procedure TCustomVLCMediaPlayer.DoOnTitleChanged(Const ATitle: cint);
+
+begin
+ If Assigned(FOnTitleChanged) then
+ FOnTitleChanged(Self,ATitle);
+end;
+
+procedure TCustomVLCMediaPlayer.DoOnSnapshot(Const AFileName : PCChar);
+
+Var
+ S :String;
+
+begin
+ If Assigned(FOnSnapshot) then
+ begin
+ if Assigned(AFileName) then
+ S:=StrPas(PChar(AFileName))
+ else
+ S:='';
+ FOnSnapShot(Self,S);
+ end;
+end;
+
+procedure TCustomVLCMediaPlayer.DoOnLengthChanged(Const ATime: libvlc_time_t);
+
+begin
+ If Assigned(FOnLengtHChanged) then
+ FOnLengtHChanged(Self,VLCTimeToDateTime(ATime));
+end;
+
+
+
+procedure TCustomVLCMediaPlayer.HandleVLCEvent(e: Plibvlc_event_t);
+
+begin
+ FECS.Enter;
+ try
+ case libvlc_event_e(e^._type) of
+ libvlc_MediaPlayerMediaChanged : DoMediaChanged;
+ libvlc_MediaPlayerNothingSpecial : DoNothingSpecial;
+ libvlc_MediaPlayerOpening : DoOnOpening;
+ libvlc_MediaPlayerBuffering : DoOnBuffering;
+ libvlc_MediaPlayerPlaying : DoOnPlaying;
+ libvlc_MediaPlayerPaused : DoOnPause;
+ libvlc_MediaPlayerStopped : DoOnStop;
+ libvlc_MediaPlayerForward : DoOnForward;
+ libvlc_MediaPlayerBackward : DoOnBackward;
+ libvlc_MediaPlayerEndReached : DoOnEOF;
+ libvlc_MediaPlayerEncounteredError : DoOnError;
+ libvlc_MediaPlayerTimeChanged : begin
+ DoOnTimeChanged(e^.media_player_time_changed.new_time);
+ end;
+ libvlc_MediaPlayerPositionChanged : begin
+ DoOnPositionChanged(e^.media_player_position_changed.new_position);
+ end;
+ libvlc_MediaPlayerSeekableChanged : begin
+ DoOnSeekableChanged(e^.media_player_seekable_changed.new_seekable<>0);
+ end;
+ libvlc_MediaPlayerPausableChanged : begin
+ DoOnPausableChanged(e^.media_player_pausable_changed.new_pausable<>0) ;
+ end;
+ libvlc_MediaPlayerTitleChanged : begin
+ DoOnTitleChanged(e^.media_player_title_changed.new_title);
+ end;
+ libvlc_MediaPlayerSnapshotTaken : begin
+ DoOnSnapShot(e^.media_player_snapshot_taken.psz_filename);
+ end;
+ libvlc_MediaPlayerLengthChanged : begin
+ DoOnLengthChanged(e^.media_player_length_changed.new_length);
+ end;
+ else
+ // Writeln('Unknown event type ',e^._type);
+ end;
+ finally
+ FECS.Leave;
+ end;
+end;
+
+destructor TCustomVLCMediaPlayer.Destroy;
+begin
+ If Assigned(FInstance) then
+ begin
+ libvlc_media_player_release(FInstance);
+ FInstance:=Nil;
+ end;
+ FreeAndNil(FECS);
+ inherited Destroy;
+end;
+
+procedure TCustomVLCMediaPlayer.SetMedia(M: TVLCMediaItem);
+
+begin
+ libvlc_media_player_set_media(Instance,M.Instance);
+end;
+
+procedure TCustomVLCMediaPlayer.Play;
+
+Var
+ W,H : Cardinal;
+
+begin
+ SetParentWindow;
+ libvlc_media_player_play(Instance);
+ If FitWindow then
+ begin
+ VideoScale:=1.0;
+ if GetVideoSize(W,H) then
+ SetParentWindowSize(W,H);
+ end;
+end;
+
+procedure TCustomVLCMediaPlayer.Play(M: TVLCMediaItem);
+
+begin
+ if Playing then
+ begin
+ Stop;
+ While Playing do
+ Sleep(100);
+ end;
+ SetMedia(M);
+ Play;
+end;
+
+procedure TCustomVLCMediaPlayer.PlayFile(const AFileName: String);
+
+Var
+ M : TVLCMediaItem;
+begin
+ M:=TVLCMediaItem.Create(Nil);
+ try
+ M.Path:=AFileName;
+ Play(M);
+ finally
+ M.Free;
+ end;
+end;
+
+procedure TCustomVLCMediaPlayer.Stop;
+begin
+ if Assigned(FInstance) then
+ libvlc_media_player_stop(FInstance);
+end;
+
+procedure TCustomVLCMediaPlayer.Pause;
+begin
+ if Assigned(FInstance) then
+ libvlc_media_player_pause(FInstance);
+end;
+
+procedure TCustomVLCMediaPlayer.Resume;
+begin
+ if (GetState()=libvlc_Paused) then
+ if Assigned(FInstance) then
+ libvlc_media_player_play(FInstance);
+end;
+
+procedure TCustomVLCMediaPlayer.NextFrame;
+begin
+ if Assigned(FInstance) then
+ libvlc_media_player_next_frame(Finstance);
+end;
+
+function TCustomVLCMediaPlayer.Snapshot(const AFileName: String): Boolean;
+
+var
+ w,h : Cardinal;
+begin
+ Result:=Assigned(FInstance);
+ if Result then
+ begin
+ w:=0;
+ h:=0;
+ Result:=libvlc_video_get_size(FInstance,0,@W,@H)=0;
+ if Result then
+ Result:=SnapShot(AFileName,W,H);
+ end;
+end;
+
+function TCustomVLCMediaPlayer.Snapshot(const AFileName: String; AWidth,
+ AHeight: Cardinal): Boolean;
+begin
+ Result:=Assigned(FInstance);
+ If Result then
+ Result:=libvlc_video_take_snapshot(FInstance,0,PCChar(PChar(AFileName)),AWidth,AHeight)=0;
+end;
+
+function TCustomVLCMediaPlayer.GetVideoSize(var AWidth, AHeight: Cardinal
+ ): Boolean;
+begin
+ Result:=libvlc_video_get_size(FInstance,0,@AWidth,@AHeight)=0;
+end;
+
+{ TVLCMediaItems }
+
+constructor TVLCMediaItems.Create(ALibrary: TVLCLibrary;AItemClass: TVLCMediaItemClass = Nil);
+begin
+ Inherited Create(AItemClass);
+ FVLC:=ALibrary;
+end;
+
+constructor TVLCMediaItems.Create(AInstance: Plibvlc_media_list_t;
+ AItemClass: TVLCMediaItemClass);
+
+
+Var
+ I : Integer;
+ P : plibvlc_media_t;
+
+begin
+ Inherited Create(AItemClass);
+ FInstance:=AInstance;
+ For I:=0 to libvlc_media_list_count(FInstance)-1 do
+ begin
+ P:=libvlc_media_list_item_at_index(FInstance,I);
+ (Add as TVLCMediaItem).SetInstance(P);
+ end;
+end;
+
+procedure TVLCMediaItems.Lock;
+begin
+ libvlc_media_list_lock(FInstance);
+end;
+
+procedure TVLCMediaItems.Unlock;
+begin
+ libvlc_media_list_lock(FInstance);
+end;
+
+function TVLCMediaItems.GetInstance: Plibvlc_media_list_t;
+Var
+ I :integer;
+begin
+ if FInstance=Nil then
+ begin
+ FInstance:=libvlc_media_list_new(VLC.Instance);
+ For I:=0 to Count-1 do
+ GetI(I).RegisterInstance;
+ end;
+ Result:=Finstance;
+end;
+
+function TVLCMediaItems.GetIsReadOnly: Boolean;
+begin
+ Result:=libvlc_media_list_is_readonly(FInstance)<>0;
+end;
+
+function TVLCMediaItems.GetI(AIndex : Integer): TVLCMediaItem;
+begin
+ Result:=Items[AIndex] as TVLCMediaItem;
+end;
+
+procedure TVLCMediaItems.SetI(AIndex : Integer; AValue: TVLCMediaItem);
+begin
+ Items[AIndex]:=AValue;
+end;
+
+
+function TVLCMediaItems.GetVLC: TVLCLibrary;
+begin
+ Result:=VLCLibrary;
+end;
+
+{ TVLCMediaItem }
+
+function TVLCMediaItem.GetInstance: plibvlc_media_t;
+begin
+ Result:=Finstance;
+ If (Result=Nil) then
+ Raise EVLC.Create('No instance available at this time. Set MRL, Path or FileDescriptor first');
+end;
+
+function TVLCMediaItem.GetM(AIndex: Integer): Boolean;
+begin
+ Result:=FOpts[AIndex];
+end;
+
+function TVLCMediaItem.GetMD(AMeta : libvlc_meta_t): String;
+
+Var
+ P : PCChar;
+
+begin
+ P:=libvlc_media_get_meta(Instance,AMeta);
+ if (P<>Nil) then
+ Result:=StrPas(PChar(p))
+ else
+ Result:='';
+end;
+
+function TVLCMediaItem.GetMRL: String;
+Var
+ P : PCChar;
+
+begin
+ P:=libvlc_media_get_mrl(Instance);
+ if (P<>Nil) then
+ Result:=StrPas(PChar(p))
+ else
+ Result:='';
+end;
+
+function TVLCMediaItem.GetParsed: Boolean;
+begin
+ Result:=libvlc_media_is_parsed(Instance)<>0;
+end;
+
+function TVLCMediaItem.GetUD: Pointer;
+begin
+ Result:=libvlc_media_get_user_data(Instance);
+end;
+
+procedure TVLCMediaItem.SetDIM(AValue: TDeinterlaceMode);
+
+Const
+ DMS : Array[TDeinterlaceMode] of string
+ = ('blend', 'discard', 'bob', 'linear', 'mean', 'x', 'yadif', 'yadif2x');
+begin
+ if (FDIM=AValue) then Exit;
+ FDIM:=AValue;
+ libvlc_media_add_option(Instance, PCChar(PChar('deinterlace-mode='+DMS[AValue])));
+end;
+
+procedure TVLCMediaItem.SetFD(AValue: Integer);
+begin
+ FFD:=AValue;
+ Finstance:=libvlc_media_new_fd(GetVLC.Instance,AValue);
+ If (FInstance=Nil) then
+ Raise EVLC.CreateFmt('Failed to create media item from file descriptor "%d"',[AValue]);
+ RegisterInstance;
+end;
+
+procedure TVLCMediaItem.SetFSS(AValue: TSNapshotFormat);
+
+Const
+ ssfs : Array[TSnapShotFormat] of string = ('png','jpg');
+
+begin
+ if FSS=AValue then Exit;
+ FSS:=AValue;
+ libvlc_media_add_option(Instance, PCChar(PChar('no-snapshot-preview')));
+ libvlc_media_add_option(instance, PCChar(PChar('snapshot-format=' + SSFS[aValue])));
+end;
+
+procedure TVLCMediaItem.SetM(AIndex: Integer; AValue: Boolean);
+
+begin
+ FOpts[AIndex]:=AValue;
+ libvlc_media_add_option(FInstance,PcChar(PChar(GetBoolOpt(AIndex,AValue))));
+end;
+
+function TVLCMediaItem.GetBoolOpt(AIndex: Integer; AValue: Boolean): String;
+begin
+ Case AINdex of
+ 0 : Result:='video-title-show';
+ 1 : Result:='video-on-top';
+ 2 : Result:='overlay';
+ 3 : Result:='fullscreen';
+ 4 : Result:='deinterlace='+IntToStr(Ord(AValue));
+ end;
+ if (AIndex < 4) and Not AValue then
+ Result:='no-'+Result;
+end;
+
+procedure TVLCMediaItem.SetMD(AMeta : libvlc_meta_t; AValue: String);
+begin
+ libvlc_media_set_meta(Instance,AMeta,Pcchar(PChar(AValue)));
+end;
+
+procedure TVLCMediaItem.SetMRL(AValue: String);
+begin
+ Finstance:=libvlc_media_new_location(GetVLC.Instance,PCChar(AValue));
+ If (FInstance=Nil) then
+ Raise EVLC.CreateFmt('Failed to create media item from MRL : "%s"',[AValue]);
+ RegisterInstance;
+end;
+
+procedure TVLCMediaItem.SetPath(AValue: String);
+begin
+ if FPath=AValue then Exit;
+ FPath:=AValue;
+ FInstance:=libvlc_media_new_path(GetVLC.Instance,PCChar(AValue));
+ if (FInstance=Nil) then
+ Raise EVLC.CreateFmt('Failed to create media item from path : "%s"',[AValue]);
+ RegisterInstance;
+end;
+
+procedure TVLCMediaItem.SetUD(AValue: Pointer);
+begin
+ libvlc_media_set_user_data(Instance,AValue);
+end;
+
+function TVLCMediaItem.GetState: libvlc_state_t;
+begin
+ Result:=libvlc_media_get_state(instance);
+end;
+
+function TVLCMediaItem.GetDuration: TDateTime;
+
+Var
+ d : libvlc_time_t;
+
+begin
+ d:=libvlc_media_get_duration(Instance);
+ Result:=D
+end;
+
+procedure TVLCMediaItem.RegisterInstance;
+
+Var
+ L : Plibvlc_media_list_t;
+
+begin
+ If Assigned(Collection) and (Collection is TVLCMediaItems) then
+ begin
+ L:=TVLCMediaItems(Collection).FInstance;
+ if (L<>Nil) then
+ begin
+ libvlc_media_list_lock(L);
+ libvlc_media_list_add_media(L, FInstance);
+ libvlc_media_list_unlock(L);
+ end;
+ end;
+end;
+
+procedure TVLCMediaItem.UnRegisterInstance;
+Var
+ L : Plibvlc_media_list_t;
+ i : integer;
+
+begin
+ If Assigned(Collection) and (Collection is TVLCMediaItems) then
+ begin
+ L:=TVLCMediaItems(Collection).FInstance;
+ if L<>Nil then
+ begin
+ libvlc_media_list_lock(L);
+ I:=libvlc_media_list_index_of_item(L,Finstance);
+ if (i>=0) then
+ libvlc_media_list_remove_index(L,i);
+ libvlc_media_list_unlock(L);
+ end;
+ end;
+end;
+
+function TVLCMediaItem.GetVLC: TVLCLibrary;
+begin
+ If Assigned(Collection) and (Collection is TVLCMediaItems) then
+ Result:=TVLCMediaItems(Collection).GetVLC
+ else
+ Result:=VLCLibrary;
+ if not Result.Initialized then
+ Result.Initialize;
+end;
+
+function TVLCMediaItem.GetEventManager: plibvlc_event_manager_t;
+begin
+ Result:=libvlc_media_event_manager(Instance);
+end;
+
+procedure TVLCMediaItem.SetInstance(Avalue: plibvlc_media_t);
+begin
+ FInstance:=AValue;
+end;
+
+destructor TVLCMediaItem.Destroy;
+begin
+ inherited Destroy;
+ if Assigned(FInstance) then
+ begin
+ UnregisterInstance;
+ libvlc_media_release(FInstance);
+ FInstance:=Nil;
+ end;
+end;
+
+procedure TVLCMediaItem.AddOption(const AValue: String);
+begin
+ libvlc_media_add_option(Instance,PCChar(PChar(AValue)));
+end;
+
+procedure TVLCMediaItem.Parse;
+begin
+ libvlc_media_parse(Instance);
+end;
+
+procedure TVLCMediaItem.ParseAsync;
+begin
+ libvlc_media_parse_async(Instance);
+end;
+
+procedure TVLCMediaItem.SaveMetaData;
+begin
+ libvlc_media_save_meta(Instance);
+end;
+
+function TVLCMediaItem.GetStats(var AStats: libvlc_media_stats_t): Boolean;
+begin
+ Result:=libvlc_media_get_stats(Instance,@AStats)<>0;
+end;
+
+function TVLCMediaItem.Duplicate: TVLCMediaItem;
+begin
+ If Assigned(Collection) and (Collection is TVLCMediaItems) then
+ Result:=TVLCMediaItems(Collection).Add as TVLCMediaItem
+ else
+ Result:=TVLCMediaItem.Create(Nil);
+ Result.SetInstance(libvlc_media_duplicate(Instance));
+end;
+
+
+function TVLCLibrary.GetLastError: String;
+
+Var
+ P : PCChar;
+
+begin
+ P:=libvlc_errmsg();
+ if Assigned(P) then
+ Result := StrPas(PChar(P))
+ else
+ Result:='';
+end;
+
+function TVLCLibrary.GetI: Boolean;
+begin
+ Result:=FInstance<>Nil;
+end;
+
+function TVLCLibrary.GetVersion: String;
+Var
+ P : PCChar;
+
+begin
+ P:=libvlc_get_version();
+ if Assigned(P) then
+ Result := StrPas(PChar(P))
+ else
+ Result:='';
+end;
+
+function TVLCLibrary.GetCompiler: String;
+Var
+ P : PCChar;
+
+begin
+ P:=libvlc_get_compiler();
+ if Assigned(P) then
+ Result := StrPas(PChar(P))
+ else
+ Result:='';
+end;
+
+function TVLCLibrary.GetChangeSet: String;
+
+Var
+ P : PCChar;
+
+begin
+ P:=libvlc_get_changeset();
+ if Assigned(P) then
+ Result := StrPas(PChar(P))
+ else
+ Result:='';
+end;
+
+procedure TVLCLibrary.SetLibraryPath(const AValue: String);
+begin
+ If AValue=FLibraryPath then exit;
+ If Assigned(FInstance) then
+ Raise EVLC.Create('VLC already initialized, cannot set librarypath');
+ FLibraryPath:=AVAlue;
+end;
+
+function TVLCLibrary.GetInstance: plibvlc_instance_t;
+
+var
+ args: Array of AnsiString;
+ cargs : array of PAnsiChar;
+ argc,
+ I : integer;
+
+begin
+ If (FInstance=Nil) then
+ begin
+ LibraryArgs.add('--no-video-title-show');
+ SetLength(cArgs,LibraryArgs.Count+2);
+ SetLength(Args,LibraryArgs.Count+1);
+ cargs[0] := PChar(FLibraryPath);
+ For I:=0 to LibraryArgs.Count-1 do
+ begin
+ Args[i]:=LibraryArgs[i];
+ CArgs[i+1]:=PChar(Args[i]);
+ end;
+ argc:=Length(CArgs);
+ cargs[argc-1] := NIL;
+ FInstance := libvlc_new(argc-1, PPcchar(cargs));
+ if (FInstance=Nil) then
+ Raise EVLC.Create('Could not create instance of libvlc');
+ end;
+ Result:=FInstance;
+end;
+
+constructor TVLCLibrary.Create(AOwner: TComponent);
+begin
+ Inherited;
+ FInstance:=Nil;
+ FLibraryPath:=LibName;
+ FLibraryArgs:=TStringList.Create;
+end;
+
+destructor TVLCLibrary.Destroy;
+begin
+ FreeAndNil(FLibraryArgs);
+ Release;
+ inherited Destroy;
+end;
+
+procedure TVLCLibrary.Initialize;
+begin
+ LoadLibVLC(LibraryPath,False);
+ GetInstance;
+end;
+
+procedure TVLCLibrary.Release;
+begin
+ If (FInstance<>Nil) then
+ begin
+ libvlc_release(FInstance);
+ FreeLibVLC;
+ end;
+ FInstance:=Nil;
+end;
+
+Initialization
+
+Finalization
+ DoneVLC;
+end.
+