mirror of
https://github.com/salvadordf/CEF4Delphi.git
synced 2025-04-07 06:50:04 +02:00
Update to CEF 83.5.0
This commit is contained in:
parent
51658e03f2
commit
882c79ac1b
@ -3,10 +3,10 @@ CEF4Delphi is an open source project created by Salvador Díaz Fau to embed Chro
|
|||||||
|
|
||||||
CEF4Delphi is based on DCEF3, made by Henri Gourvest. The original license of DCEF3 still applies to CEF4Delphi. Read the license terms in the first lines of any *.pas file.
|
CEF4Delphi is based on DCEF3, made by Henri Gourvest. The original license of DCEF3 still applies to CEF4Delphi. Read the license terms in the first lines of any *.pas file.
|
||||||
|
|
||||||
CEF4Delphi uses CEF 83.4.2 which includes Chromium 83.0.4103.106.
|
CEF4Delphi uses CEF 83.5.0 which includes Chromium 83.0.4103.106.
|
||||||
The CEF binaries used by CEF4Delphi are available for download at spotify :
|
The CEF binaries used by CEF4Delphi are available for download at spotify :
|
||||||
* [32 bits](http://opensource.spotify.com/cefbuilds/cef_binary_83.4.2%2Bgc8d4f85%2Bchromium-83.0.4103.106_windows32.tar.bz2)
|
* [32 bits](http://opensource.spotify.com/cefbuilds/cef_binary_83.5.0%2Bgbf03589%2Bchromium-83.0.4103.106_windows32.tar.bz2)
|
||||||
* [64 bits](http://opensource.spotify.com/cefbuilds/cef_binary_83.4.2%2Bgc8d4f85%2Bchromium-83.0.4103.106_windows64.tar.bz2)
|
* [64 bits](http://opensource.spotify.com/cefbuilds/cef_binary_83.5.0%2Bgbf03589%2Bchromium-83.0.4103.106_windows64.tar.bz2)
|
||||||
|
|
||||||
|
|
||||||
CEF4Delphi was developed and tested on Delphi 10.4 and it has been tested in Delphi 7, Delphi XE, Delphi 10, Delphi 10.2, Delphi 10.3 and Lazarus 2.0.10/FPC 3.2.0. CEF4Delphi includes VCL, FireMonkey (FMX) and Lazarus components.
|
CEF4Delphi was developed and tested on Delphi 10.4 and it has been tested in Delphi 7, Delphi XE, Delphi 10, Delphi 10.2, Delphi 10.3 and Lazarus 2.0.10/FPC 3.2.0. CEF4Delphi includes VCL, FireMonkey (FMX) and Lazarus components.
|
||||||
|
@ -55,21 +55,43 @@ object MediaRouterFrm: TMediaRouterFrm
|
|||||||
Left = 12
|
Left = 12
|
||||||
Top = 25
|
Top = 25
|
||||||
Width = 226
|
Width = 226
|
||||||
Height = 616
|
Height = 579
|
||||||
Align = alClient
|
Align = alClient
|
||||||
ItemHeight = 13
|
ItemHeight = 13
|
||||||
TabOrder = 0
|
TabOrder = 0
|
||||||
OnClick = SinksLbxClick
|
OnClick = SinksLbxClick
|
||||||
|
ExplicitHeight = 616
|
||||||
end
|
end
|
||||||
object SinksButtonsPnl: TPanel
|
object SinksButtonsPnl: TPanel
|
||||||
Left = 12
|
Left = 12
|
||||||
Top = 641
|
Top = 604
|
||||||
Width = 226
|
Width = 226
|
||||||
Height = 74
|
Height = 111
|
||||||
Align = alBottom
|
Align = alBottom
|
||||||
BevelOuter = bvNone
|
BevelOuter = bvNone
|
||||||
Padding.Top = 10
|
Padding.Top = 10
|
||||||
TabOrder = 1
|
TabOrder = 1
|
||||||
|
object GetDeviceInfoBtn: TButton
|
||||||
|
Left = 0
|
||||||
|
Top = 47
|
||||||
|
Width = 226
|
||||||
|
Height = 27
|
||||||
|
Caption = 'Get device info'
|
||||||
|
Enabled = False
|
||||||
|
TabOrder = 0
|
||||||
|
OnClick = GetDeviceInfoBtnClick
|
||||||
|
end
|
||||||
|
object NotifySinksBtn: TButton
|
||||||
|
Left = 0
|
||||||
|
Top = 84
|
||||||
|
Width = 226
|
||||||
|
Height = 27
|
||||||
|
Align = alBottom
|
||||||
|
Caption = 'Notify sinks'
|
||||||
|
TabOrder = 1
|
||||||
|
OnClick = NotifySinksBtnClick
|
||||||
|
ExplicitTop = 47
|
||||||
|
end
|
||||||
object CreateRouteBtn: TButton
|
object CreateRouteBtn: TButton
|
||||||
Left = 0
|
Left = 0
|
||||||
Top = 10
|
Top = 10
|
||||||
@ -78,18 +100,9 @@ object MediaRouterFrm: TMediaRouterFrm
|
|||||||
Align = alTop
|
Align = alTop
|
||||||
Caption = 'Create route'
|
Caption = 'Create route'
|
||||||
Enabled = False
|
Enabled = False
|
||||||
TabOrder = 0
|
TabOrder = 2
|
||||||
OnClick = CreateRouteBtnClick
|
OnClick = CreateRouteBtnClick
|
||||||
end
|
ExplicitTop = 18
|
||||||
object NotifySinksBtn: TButton
|
|
||||||
Left = 0
|
|
||||||
Top = 47
|
|
||||||
Width = 226
|
|
||||||
Height = 27
|
|
||||||
Align = alBottom
|
|
||||||
Caption = 'Notify sinks'
|
|
||||||
TabOrder = 1
|
|
||||||
OnClick = NotifySinksBtnClick
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -125,11 +138,13 @@ object MediaRouterFrm: TMediaRouterFrm
|
|||||||
object SourceURNLbl: TLabel
|
object SourceURNLbl: TLabel
|
||||||
Left = 0
|
Left = 0
|
||||||
Top = 0
|
Top = 0
|
||||||
Width = 57
|
Width = 65
|
||||||
Height = 13
|
Height = 21
|
||||||
Align = alClient
|
Align = alClient
|
||||||
Caption = 'Source URN'
|
Caption = 'Source URN'
|
||||||
Layout = tlCenter
|
Layout = tlCenter
|
||||||
|
ExplicitWidth = 57
|
||||||
|
ExplicitHeight = 13
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
object SourceURNCbx: TComboBox
|
object SourceURNCbx: TComboBox
|
||||||
@ -300,6 +315,7 @@ object MediaRouterFrm: TMediaRouterFrm
|
|||||||
end
|
end
|
||||||
object Chromium1: TChromium
|
object Chromium1: TChromium
|
||||||
OnMediaRouteCreateFinished = Chromium1MediaRouteCreateFinished
|
OnMediaRouteCreateFinished = Chromium1MediaRouteCreateFinished
|
||||||
|
OnMediaSinkDeviceInfo = Chromium1MediaSinkDeviceInfo
|
||||||
OnAfterCreated = Chromium1AfterCreated
|
OnAfterCreated = Chromium1AfterCreated
|
||||||
OnBeforeClose = Chromium1BeforeClose
|
OnBeforeClose = Chromium1BeforeClose
|
||||||
OnClose = Chromium1Close
|
OnClose = Chromium1Close
|
||||||
|
@ -69,7 +69,7 @@ type
|
|||||||
SinksGbx: TGroupBox;
|
SinksGbx: TGroupBox;
|
||||||
SinksLbx: TListBox;
|
SinksLbx: TListBox;
|
||||||
SinksButtonsPnl: TPanel;
|
SinksButtonsPnl: TPanel;
|
||||||
CreateRouteBtn: TButton;
|
GetDeviceInfoBtn: TButton;
|
||||||
CentralPnl: TPanel;
|
CentralPnl: TPanel;
|
||||||
SourcePnl: TPanel;
|
SourcePnl: TPanel;
|
||||||
SourceLblPnl: TPanel;
|
SourceLblPnl: TPanel;
|
||||||
@ -90,6 +90,7 @@ type
|
|||||||
ClearLogPnl: TPanel;
|
ClearLogPnl: TPanel;
|
||||||
ClearLogBtn: TButton;
|
ClearLogBtn: TButton;
|
||||||
SourceURNCbx: TComboBox;
|
SourceURNCbx: TComboBox;
|
||||||
|
CreateRouteBtn: TButton;
|
||||||
|
|
||||||
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
|
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
|
||||||
procedure FormCreate(Sender: TObject);
|
procedure FormCreate(Sender: TObject);
|
||||||
@ -104,11 +105,12 @@ type
|
|||||||
procedure Chromium1RouteStateChanged(Sender: TObject; const route: ICefMediaRoute; state: TCefMediaRouteConnectionState);
|
procedure Chromium1RouteStateChanged(Sender: TObject; const route: ICefMediaRoute; state: TCefMediaRouteConnectionState);
|
||||||
procedure Chromium1RouteMessageReceived(Sender: TObject; const route: ICefMediaRoute; const message_: ustring);
|
procedure Chromium1RouteMessageReceived(Sender: TObject; const route: ICefMediaRoute; const message_: ustring);
|
||||||
procedure Chromium1MediaRouteCreateFinished(Sender: TObject; result: Integer; const error: ustring; const route: ICefMediaRoute);
|
procedure Chromium1MediaRouteCreateFinished(Sender: TObject; result: Integer; const error: ustring; const route: ICefMediaRoute);
|
||||||
|
procedure Chromium1MediaSinkDeviceInfo(Sender: TObject; const ip_address: ustring; port: Integer; const model_name: ustring);
|
||||||
|
|
||||||
procedure Timer1Timer(Sender: TObject);
|
procedure Timer1Timer(Sender: TObject);
|
||||||
procedure SourceURNEdtChange(Sender: TObject);
|
procedure SourceURNEdtChange(Sender: TObject);
|
||||||
procedure SinksLbxClick(Sender: TObject);
|
procedure SinksLbxClick(Sender: TObject);
|
||||||
procedure CreateRouteBtnClick(Sender: TObject);
|
procedure GetDeviceInfoBtnClick(Sender: TObject);
|
||||||
procedure TerminateRouteBtnClick(Sender: TObject);
|
procedure TerminateRouteBtnClick(Sender: TObject);
|
||||||
procedure SendMsgBtnClick(Sender: TObject);
|
procedure SendMsgBtnClick(Sender: TObject);
|
||||||
procedure NotifySinksBtnClick(Sender: TObject);
|
procedure NotifySinksBtnClick(Sender: TObject);
|
||||||
@ -116,6 +118,7 @@ type
|
|||||||
procedure ClearLogBtnClick(Sender: TObject);
|
procedure ClearLogBtnClick(Sender: TObject);
|
||||||
procedure MessageMemChange(Sender: TObject);
|
procedure MessageMemChange(Sender: TObject);
|
||||||
procedure RoutesLbxClick(Sender: TObject);
|
procedure RoutesLbxClick(Sender: TObject);
|
||||||
|
procedure CreateRouteBtnClick(Sender: TObject);
|
||||||
|
|
||||||
protected
|
protected
|
||||||
// Variables to control when can we destroy the form safely
|
// Variables to control when can we destroy the form safely
|
||||||
@ -265,6 +268,22 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TMediaRouterFrm.Chromium1MediaSinkDeviceInfo(Sender: TObject;
|
||||||
|
const ip_address: ustring; port: Integer; const model_name: ustring);
|
||||||
|
begin
|
||||||
|
try
|
||||||
|
FMediaCS.Acquire;
|
||||||
|
FLog.Add('Sink device info');
|
||||||
|
FLog.Add('IP address : ' + ip_address);
|
||||||
|
FLog.Add('Port : ' + inttostr(port));
|
||||||
|
FLog.Add('Model name : ' + model_name);
|
||||||
|
FLog.Add('------------------------------------------');
|
||||||
|
finally
|
||||||
|
PostMessage(Handle, MEDIA_ROUTER_PENDING_LOG_LINES, 0, 0);
|
||||||
|
FMediaCS.Release;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TMediaRouterFrm.Chromium1RouteMessageReceived(Sender: TObject;
|
procedure TMediaRouterFrm.Chromium1RouteMessageReceived(Sender: TObject;
|
||||||
const route: ICefMediaRoute; const message_: ustring);
|
const route: ICefMediaRoute; const message_: ustring);
|
||||||
var
|
var
|
||||||
@ -323,6 +342,8 @@ begin
|
|||||||
FClosing := True;
|
FClosing := True;
|
||||||
Visible := False;
|
Visible := False;
|
||||||
DestroyAllArrays;
|
DestroyAllArrays;
|
||||||
|
Chromium1.ExecuteDevToolsMethod(0, 'Cast.disable', nil);
|
||||||
|
sleep(500);
|
||||||
Chromium1.CloseBrowser(True);
|
Chromium1.CloseBrowser(True);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -546,6 +567,64 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TMediaRouterFrm.CreateRouteBtnClick(Sender: TObject);
|
||||||
|
var
|
||||||
|
TempURN, TempErrorMsg : string;
|
||||||
|
TempSource : ICefMediaSource;
|
||||||
|
begin
|
||||||
|
TempURN := trim(SourceURNCbx.Text);
|
||||||
|
|
||||||
|
if (length(TempURN) = 0) then
|
||||||
|
begin
|
||||||
|
AddLogEntry('Invalid URN');
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TempErrorMsg := '';
|
||||||
|
|
||||||
|
try
|
||||||
|
try
|
||||||
|
FMediaCS.Acquire;
|
||||||
|
|
||||||
|
if (FSinks <> nil) and
|
||||||
|
(SinksLbx.Items.Count > 0) and
|
||||||
|
(SinksLbx.ItemIndex >= 0) and
|
||||||
|
(SinksLbx.ItemIndex < length(FSinks)) then
|
||||||
|
begin
|
||||||
|
TempSource := Chromium1.GetSource(TempURN);
|
||||||
|
|
||||||
|
if (TempSource <> nil) and TempSource.IsValid then
|
||||||
|
begin
|
||||||
|
if (FSinks[SinksLbx.ItemIndex].SinkIntf <> nil) and
|
||||||
|
FSinks[SinksLbx.ItemIndex].SinkIntf.IsValid then
|
||||||
|
begin
|
||||||
|
if FSinks[SinksLbx.ItemIndex].SinkIntf.IsCompatibleWith(TempSource) then
|
||||||
|
Chromium1.CreateRoute(TempSource, FSinks[SinksLbx.ItemIndex].SinkIntf)
|
||||||
|
else
|
||||||
|
TempErrorMsg := 'The selected Sink is not compatible with the Media Source.';
|
||||||
|
end
|
||||||
|
else
|
||||||
|
TempErrorMsg := 'The selected Sink is not valid.';
|
||||||
|
end
|
||||||
|
else
|
||||||
|
TempErrorMsg := 'The Media Source is not valid.';
|
||||||
|
end
|
||||||
|
else
|
||||||
|
TempErrorMsg := 'The sinks list is outdated.';
|
||||||
|
except
|
||||||
|
on e : exception do
|
||||||
|
begin
|
||||||
|
TempErrorMsg := e.Message;
|
||||||
|
if CustomExceptionHandler('TMediaRouterFrm.CreateRouteBtnClick', e) then raise;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
TempSource := nil;
|
||||||
|
FMediaCS.Release;
|
||||||
|
if (length(TempErrorMsg) > 0) then AddLogEntry(TempErrorMsg);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TMediaRouterFrm.CopySinksArray(const aSinks : TCefMediaSinkArray);
|
procedure TMediaRouterFrm.CopySinksArray(const aSinks : TCefMediaSinkArray);
|
||||||
var
|
var
|
||||||
i, TempLen : integer;
|
i, TempLen : integer;
|
||||||
@ -623,22 +702,8 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMediaRouterFrm.CreateRouteBtnClick(Sender: TObject);
|
procedure TMediaRouterFrm.GetDeviceInfoBtnClick(Sender: TObject);
|
||||||
var
|
|
||||||
TempURN, TempErrorMsg : string;
|
|
||||||
TempSource : ICefMediaSource;
|
|
||||||
begin
|
begin
|
||||||
TempURN := trim(SourceURNCbx.Text);
|
|
||||||
|
|
||||||
if (length(TempURN) = 0) then
|
|
||||||
begin
|
|
||||||
AddLogEntry('Invalid URN');
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
|
|
||||||
TempErrorMsg := '';
|
|
||||||
|
|
||||||
try
|
|
||||||
try
|
try
|
||||||
FMediaCS.Acquire;
|
FMediaCS.Acquire;
|
||||||
|
|
||||||
@ -646,38 +711,9 @@ begin
|
|||||||
(SinksLbx.Items.Count > 0) and
|
(SinksLbx.Items.Count > 0) and
|
||||||
(SinksLbx.ItemIndex >= 0) and
|
(SinksLbx.ItemIndex >= 0) and
|
||||||
(SinksLbx.ItemIndex < length(FSinks)) then
|
(SinksLbx.ItemIndex < length(FSinks)) then
|
||||||
begin
|
Chromium1.GetDeviceInfo(FSinks[SinksLbx.ItemIndex].SinkIntf);
|
||||||
TempSource := Chromium1.GetSource(TempURN);
|
|
||||||
|
|
||||||
if (TempSource <> nil) and TempSource.IsValid then
|
|
||||||
begin
|
|
||||||
if (FSinks[SinksLbx.ItemIndex].SinkIntf <> nil) and
|
|
||||||
FSinks[SinksLbx.ItemIndex].SinkIntf.IsValid then
|
|
||||||
begin
|
|
||||||
if FSinks[SinksLbx.ItemIndex].SinkIntf.IsCompatibleWith(TempSource) then
|
|
||||||
Chromium1.CreateRoute(TempSource, FSinks[SinksLbx.ItemIndex].SinkIntf)
|
|
||||||
else
|
|
||||||
TempErrorMsg := 'The selected Sink is not compatible with the Media Source.';
|
|
||||||
end
|
|
||||||
else
|
|
||||||
TempErrorMsg := 'The selected Sink is not valid.';
|
|
||||||
end
|
|
||||||
else
|
|
||||||
TempErrorMsg := 'The Media Source is not valid.';
|
|
||||||
end
|
|
||||||
else
|
|
||||||
TempErrorMsg := 'The sinks list is outdated.';
|
|
||||||
except
|
|
||||||
on e : exception do
|
|
||||||
begin
|
|
||||||
TempErrorMsg := e.Message;
|
|
||||||
if CustomExceptionHandler('TMediaRouterFrm.CreateRouteBtnClick', e) then raise;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
finally
|
finally
|
||||||
TempSource := nil;
|
|
||||||
FMediaCS.Release;
|
FMediaCS.Release;
|
||||||
if (length(TempErrorMsg) > 0) then AddLogEntry(TempErrorMsg);
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -754,10 +790,12 @@ begin
|
|||||||
SendMsgBtn.Enabled := TerminateRouteBtn.Enabled and
|
SendMsgBtn.Enabled := TerminateRouteBtn.Enabled and
|
||||||
(length(trim(MessageMem.Lines.Text)) > 0);
|
(length(trim(MessageMem.Lines.Text)) > 0);
|
||||||
|
|
||||||
CreateRouteBtn.Enabled := not(TerminateRouteBtn.Enabled) and
|
GetDeviceInfoBtn.Enabled := (SinksLbx.ItemIndex >= 0) and
|
||||||
(length(trim(SourceURNCbx.Text)) > 0) and
|
|
||||||
(SinksLbx.ItemIndex >= 0) and
|
|
||||||
(SinksLbx.Items.Count > 0);
|
(SinksLbx.Items.Count > 0);
|
||||||
|
|
||||||
|
CreateRouteBtn.Enabled := not(TerminateRouteBtn.Enabled) and
|
||||||
|
GetDeviceInfoBtn.Enabled and
|
||||||
|
(length(trim(SourceURNCbx.Text)) > 0);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMediaRouterFrm.AddLogEntry(const aMessage1, aMessage2 : string; aRec : boolean);
|
procedure TMediaRouterFrm.AddLogEntry(const aMessage1, aMessage2 : string; aRec : boolean);
|
||||||
|
@ -215,7 +215,8 @@ contains
|
|||||||
uCEFLabelButtonComponent in '..\source\uCEFLabelButtonComponent.pas',
|
uCEFLabelButtonComponent in '..\source\uCEFLabelButtonComponent.pas',
|
||||||
uCEFMenuButtonComponent in '..\source\uCEFMenuButtonComponent.pas',
|
uCEFMenuButtonComponent in '..\source\uCEFMenuButtonComponent.pas',
|
||||||
uCEFAudioHandler in '..\source\uCEFAudioHandler.pas',
|
uCEFAudioHandler in '..\source\uCEFAudioHandler.pas',
|
||||||
uCEFDevToolsMessageObserver in '..\source\uCEFDevToolsMessageObserver.pas';
|
uCEFDevToolsMessageObserver in '..\source\uCEFDevToolsMessageObserver.pas',
|
||||||
|
uCEFMediaSinkDeviceInfoCallback in '..\source\uCEFMediaSinkDeviceInfoCallback.pas';
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
@ -212,6 +212,7 @@ contains
|
|||||||
uCEFLabelButtonComponent in '..\source\uCEFLabelButtonComponent.pas',
|
uCEFLabelButtonComponent in '..\source\uCEFLabelButtonComponent.pas',
|
||||||
uCEFMenuButtonComponent in '..\source\uCEFMenuButtonComponent.pas',
|
uCEFMenuButtonComponent in '..\source\uCEFMenuButtonComponent.pas',
|
||||||
uCEFAudioHandler in '..\source\uCEFAudioHandler.pas',
|
uCEFAudioHandler in '..\source\uCEFAudioHandler.pas',
|
||||||
uCEFDevToolsMessageObserver in '..\source\uCEFDevToolsMessageObserver.pas';
|
uCEFDevToolsMessageObserver in '..\source\uCEFDevToolsMessageObserver.pas',
|
||||||
|
uCEFMediaSinkDeviceInfoCallback in '..\source\uCEFMediaSinkDeviceInfoCallback.pas';
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
@ -220,7 +220,8 @@ contains
|
|||||||
uCEFLabelButtonComponent in '..\source\uCEFLabelButtonComponent.pas',
|
uCEFLabelButtonComponent in '..\source\uCEFLabelButtonComponent.pas',
|
||||||
uCEFMenuButtonComponent in '..\source\uCEFMenuButtonComponent.pas',
|
uCEFMenuButtonComponent in '..\source\uCEFMenuButtonComponent.pas',
|
||||||
uCEFAudioHandler in '..\source\uCEFAudioHandler.pas',
|
uCEFAudioHandler in '..\source\uCEFAudioHandler.pas',
|
||||||
uCEFDevToolsMessageObserver in '..\source\uCEFDevToolsMessageObserver.pas';
|
uCEFDevToolsMessageObserver in '..\source\uCEFDevToolsMessageObserver.pas',
|
||||||
|
uCEFMediaSinkDeviceInfoCallback in '..\source\uCEFMediaSinkDeviceInfoCallback.pas';
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
@ -336,6 +336,7 @@
|
|||||||
<DCCReference Include="..\source\uCEFMenuButtonComponent.pas"/>
|
<DCCReference Include="..\source\uCEFMenuButtonComponent.pas"/>
|
||||||
<DCCReference Include="..\source\uCEFAudioHandler.pas"/>
|
<DCCReference Include="..\source\uCEFAudioHandler.pas"/>
|
||||||
<DCCReference Include="..\source\uCEFDevToolsMessageObserver.pas"/>
|
<DCCReference Include="..\source\uCEFDevToolsMessageObserver.pas"/>
|
||||||
|
<DCCReference Include="..\source\uCEFMediaSinkDeviceInfoCallback.pas"/>
|
||||||
<BuildConfiguration Include="Base">
|
<BuildConfiguration Include="Base">
|
||||||
<Key>Base</Key>
|
<Key>Base</Key>
|
||||||
</BuildConfiguration>
|
</BuildConfiguration>
|
||||||
|
@ -21,8 +21,8 @@
|
|||||||
</CompilerOptions>
|
</CompilerOptions>
|
||||||
<Description Value="CEF4Delphi is an open source project created by Salvador Díaz Fau to embed Chromium-based browsers in applications made with Delphi or Lazarus/FPC."/>
|
<Description Value="CEF4Delphi is an open source project created by Salvador Díaz Fau to embed Chromium-based browsers in applications made with Delphi or Lazarus/FPC."/>
|
||||||
<License Value="MPL 1.1"/>
|
<License Value="MPL 1.1"/>
|
||||||
<Version Major="83" Minor="4" Release="2"/>
|
<Version Major="83" Minor="5"/>
|
||||||
<Files Count="187">
|
<Files Count="188">
|
||||||
<Item1>
|
<Item1>
|
||||||
<Filename Value="..\source\uCEFAccessibilityHandler.pas"/>
|
<Filename Value="..\source\uCEFAccessibilityHandler.pas"/>
|
||||||
<UnitName Value="uCEFAccessibilityHandler"/>
|
<UnitName Value="uCEFAccessibilityHandler"/>
|
||||||
@ -787,6 +787,10 @@
|
|||||||
<Filename Value="..\source\uCEFDevToolsMessageObserver.pas"/>
|
<Filename Value="..\source\uCEFDevToolsMessageObserver.pas"/>
|
||||||
<UnitName Value="uCEFDevToolsMessageObserver"/>
|
<UnitName Value="uCEFDevToolsMessageObserver"/>
|
||||||
</Item187>
|
</Item187>
|
||||||
|
<Item188>
|
||||||
|
<Filename Value="..\source\uCEFMediaSinkDeviceInfoCallback.pas"/>
|
||||||
|
<UnitName Value="uCEFMediaSinkDeviceInfoCallback"/>
|
||||||
|
</Item188>
|
||||||
</Files>
|
</Files>
|
||||||
<RequiredPkgs Count="4">
|
<RequiredPkgs Count="4">
|
||||||
<Item1>
|
<Item1>
|
||||||
|
@ -62,7 +62,7 @@ uses
|
|||||||
uCEFBrowserViewComponent, uCEFWindowComponent, uCEFPanelComponent,
|
uCEFBrowserViewComponent, uCEFWindowComponent, uCEFPanelComponent,
|
||||||
uCEFScrollViewComponent, uCEFTextfieldComponent, uCEFViewComponent,
|
uCEFScrollViewComponent, uCEFTextfieldComponent, uCEFViewComponent,
|
||||||
uCEFViewsFrameworkEvents, uCEFAudioHandler, uCEFDevToolsMessageObserver,
|
uCEFViewsFrameworkEvents, uCEFAudioHandler, uCEFDevToolsMessageObserver,
|
||||||
LazarusPackageIntf;
|
uCEFMediaSinkDeviceInfoCallback, LazarusPackageIntf;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
|
@ -61,8 +61,8 @@ uses
|
|||||||
|
|
||||||
const
|
const
|
||||||
CEF_SUPPORTED_VERSION_MAJOR = 83;
|
CEF_SUPPORTED_VERSION_MAJOR = 83;
|
||||||
CEF_SUPPORTED_VERSION_MINOR = 4;
|
CEF_SUPPORTED_VERSION_MINOR = 5;
|
||||||
CEF_SUPPORTED_VERSION_RELEASE = 2;
|
CEF_SUPPORTED_VERSION_RELEASE = 0;
|
||||||
CEF_SUPPORTED_VERSION_BUILD = 0;
|
CEF_SUPPORTED_VERSION_BUILD = 0;
|
||||||
|
|
||||||
CEF_CHROMEELF_VERSION_MAJOR = 83;
|
CEF_CHROMEELF_VERSION_MAJOR = 83;
|
||||||
|
@ -299,6 +299,7 @@ type
|
|||||||
FOnCookieSet : TOnCookieSet;
|
FOnCookieSet : TOnCookieSet;
|
||||||
FOnZoomPctAvailable : TOnZoomPctAvailable;
|
FOnZoomPctAvailable : TOnZoomPctAvailable;
|
||||||
FOnMediaRouteCreateFinished : TOnMediaRouteCreateFinishedEvent;
|
FOnMediaRouteCreateFinished : TOnMediaRouteCreateFinishedEvent;
|
||||||
|
FOnMediaSinkDeviceInfo : TOnMediaSinkDeviceInfoEvent;
|
||||||
{$IFDEF MSWINDOWS}
|
{$IFDEF MSWINDOWS}
|
||||||
FOnBrowserCompMsg : TOnCompMsgEvent;
|
FOnBrowserCompMsg : TOnCompMsgEvent;
|
||||||
FOnWidgetCompMsg : TOnCompMsgEvent;
|
FOnWidgetCompMsg : TOnCompMsgEvent;
|
||||||
@ -612,6 +613,7 @@ type
|
|||||||
procedure doSetZoomPct(const aValue : double); virtual;
|
procedure doSetZoomPct(const aValue : double); virtual;
|
||||||
procedure doSetZoomStep(aValue : byte); virtual;
|
procedure doSetZoomStep(aValue : byte); virtual;
|
||||||
procedure doMediaRouteCreateFinished(result: TCefMediaRouterCreateResult; const error: ustring; const route: ICefMediaRoute); virtual;
|
procedure doMediaRouteCreateFinished(result: TCefMediaRouterCreateResult; const error: ustring; const route: ICefMediaRoute); virtual;
|
||||||
|
procedure doOnMediaSinkDeviceInfo(const ip_address: ustring; port: integer; const model_name: ustring); virtual;
|
||||||
function MustCreateAudioHandler : boolean; virtual;
|
function MustCreateAudioHandler : boolean; virtual;
|
||||||
function MustCreateDevToolsMessageObserver : boolean; virtual;
|
function MustCreateDevToolsMessageObserver : boolean; virtual;
|
||||||
function MustCreateLoadHandler : boolean; virtual;
|
function MustCreateLoadHandler : boolean; virtual;
|
||||||
@ -779,6 +781,7 @@ type
|
|||||||
procedure NotifyCurrentSinks;
|
procedure NotifyCurrentSinks;
|
||||||
procedure NotifyCurrentRoutes;
|
procedure NotifyCurrentRoutes;
|
||||||
procedure CreateRoute(const source: ICefMediaSource; const sink: ICefMediaSink);
|
procedure CreateRoute(const source: ICefMediaSource; const sink: ICefMediaSink);
|
||||||
|
procedure GetDeviceInfo(const aMediaSink: ICefMediaSink);
|
||||||
|
|
||||||
property DefaultUrl : ustring read FDefaultUrl write FDefaultUrl;
|
property DefaultUrl : ustring read FDefaultUrl write FDefaultUrl;
|
||||||
property Options : TChromiumOptions read FOptions write FOptions;
|
property Options : TChromiumOptions read FOptions write FOptions;
|
||||||
@ -882,6 +885,7 @@ type
|
|||||||
property OnCookieSet : TOnCookieSet read FOnCookieSet write FOnCookieSet;
|
property OnCookieSet : TOnCookieSet read FOnCookieSet write FOnCookieSet;
|
||||||
property OnZoomPctAvailable : TOnZoomPctAvailable read FOnZoomPctAvailable write FOnZoomPctAvailable;
|
property OnZoomPctAvailable : TOnZoomPctAvailable read FOnZoomPctAvailable write FOnZoomPctAvailable;
|
||||||
property OnMediaRouteCreateFinished : TOnMediaRouteCreateFinishedEvent read FOnMediaRouteCreateFinished write FOnMediaRouteCreateFinished;
|
property OnMediaRouteCreateFinished : TOnMediaRouteCreateFinishedEvent read FOnMediaRouteCreateFinished write FOnMediaRouteCreateFinished;
|
||||||
|
property OnMediaSinkDeviceInfo : TOnMediaSinkDeviceInfoEvent read FOnMediaSinkDeviceInfo write FOnMediaSinkDeviceInfo;
|
||||||
{$IFDEF MSWINDOWS}
|
{$IFDEF MSWINDOWS}
|
||||||
property OnBrowserCompMsg : TOnCompMsgEvent read FOnBrowserCompMsg write FOnBrowserCompMsg;
|
property OnBrowserCompMsg : TOnCompMsgEvent read FOnBrowserCompMsg write FOnBrowserCompMsg;
|
||||||
property OnWidgetCompMsg : TOnCompMsgEvent read FOnWidgetCompMsg write FOnWidgetCompMsg;
|
property OnWidgetCompMsg : TOnCompMsgEvent read FOnWidgetCompMsg write FOnWidgetCompMsg;
|
||||||
@ -1099,7 +1103,8 @@ uses
|
|||||||
uCEFStringVisitor, uCEFListValue, uCEFNavigationEntryVisitor,
|
uCEFStringVisitor, uCEFListValue, uCEFNavigationEntryVisitor,
|
||||||
uCEFDownloadImageCallBack, uCEFCookieManager, uCEFRequestContextHandler,
|
uCEFDownloadImageCallBack, uCEFCookieManager, uCEFRequestContextHandler,
|
||||||
uCEFCookieVisitor, uCEFSetCookieCallback, uCEFResourceRequestHandler,
|
uCEFCookieVisitor, uCEFSetCookieCallback, uCEFResourceRequestHandler,
|
||||||
uCEFMediaObserver, uCEFMediaRouteCreateCallback ,uCEFDevToolsMessageObserver;
|
uCEFMediaObserver, uCEFMediaRouteCreateCallback ,uCEFDevToolsMessageObserver,
|
||||||
|
uCEFMediaSinkDeviceInfoCallback;
|
||||||
|
|
||||||
constructor TChromiumCore.Create(AOwner: TComponent);
|
constructor TChromiumCore.Create(AOwner: TComponent);
|
||||||
begin
|
begin
|
||||||
@ -1681,6 +1686,7 @@ begin
|
|||||||
FOnCookieSet := nil;
|
FOnCookieSet := nil;
|
||||||
FOnZoomPctAvailable := nil;
|
FOnZoomPctAvailable := nil;
|
||||||
FOnMediaRouteCreateFinished := nil;
|
FOnMediaRouteCreateFinished := nil;
|
||||||
|
FOnMediaSinkDeviceInfo := nil;
|
||||||
|
|
||||||
{$IFDEF MSWINDOWS}
|
{$IFDEF MSWINDOWS}
|
||||||
FOnBrowserCompMsg := nil;
|
FOnBrowserCompMsg := nil;
|
||||||
@ -4628,6 +4634,12 @@ begin
|
|||||||
FOnMediaRouteCreateFinished(self, result, error, route);
|
FOnMediaRouteCreateFinished(self, result, error, route);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TChromiumCore.doOnMediaSinkDeviceInfo(const ip_address: ustring; port: integer; const model_name: ustring);
|
||||||
|
begin
|
||||||
|
if assigned(FOnMediaSinkDeviceInfo) then
|
||||||
|
FOnMediaSinkDeviceInfo(self, ip_address, port, model_name);
|
||||||
|
end;
|
||||||
|
|
||||||
function TChromiumCore.MustCreateLoadHandler : boolean;
|
function TChromiumCore.MustCreateLoadHandler : boolean;
|
||||||
begin
|
begin
|
||||||
Result := assigned(FOnLoadStart) or
|
Result := assigned(FOnLoadStart) or
|
||||||
@ -6424,6 +6436,19 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TChromiumCore.GetDeviceInfo(const aMediaSink: ICefMediaSink);
|
||||||
|
var
|
||||||
|
TempCallback : ICefMediaSinkDeviceInfoCallback;
|
||||||
|
begin
|
||||||
|
if (aMediaSink <> nil) then
|
||||||
|
try
|
||||||
|
TempCallback := TCefCustomMediaSinkDeviceInfoCallback.Create(self);
|
||||||
|
aMediaSink.GetDeviceInfo(TempCallback);
|
||||||
|
finally
|
||||||
|
TempCallback := nil;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
{$IFDEF MSWINDOWS}
|
{$IFDEF MSWINDOWS}
|
||||||
function TChromiumCore.CopyDCToBitmapStream(aSrcDC : HDC; const aSrcRect : TRect; var aStream : TStream) : boolean;
|
function TChromiumCore.CopyDCToBitmapStream(aSrcDC : HDC; const aSrcRect : TRect; var aStream : TStream) : boolean;
|
||||||
var
|
var
|
||||||
|
@ -201,6 +201,7 @@ type
|
|||||||
TOnCookieSet = procedure(Sender: TObject; aSuccess : boolean; aID : integer) of object;
|
TOnCookieSet = procedure(Sender: TObject; aSuccess : boolean; aID : integer) of object;
|
||||||
TOnZoomPctAvailable = procedure(Sender: TObject; const aZoomPct : double) of object;
|
TOnZoomPctAvailable = procedure(Sender: TObject; const aZoomPct : double) of object;
|
||||||
TOnMediaRouteCreateFinishedEvent = procedure(Sender: TObject; result: TCefMediaRouterCreateResult; const error: ustring; const route: ICefMediaRoute) of object;
|
TOnMediaRouteCreateFinishedEvent = procedure(Sender: TObject; result: TCefMediaRouterCreateResult; const error: ustring; const route: ICefMediaRoute) of object;
|
||||||
|
TOnMediaSinkDeviceInfoEvent = procedure(Sender: TObject; const ip_address: ustring; port: integer; const model_name: ustring) of object;
|
||||||
{$IFDEF MSWINDOWS}
|
{$IFDEF MSWINDOWS}
|
||||||
TOnCompMsgEvent = procedure(var aMessage: TMessage; var aHandled: Boolean) of object;
|
TOnCompMsgEvent = procedure(var aMessage: TMessage; var aHandled: Boolean) of object;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
@ -149,6 +149,7 @@ type
|
|||||||
ICefMediaRoute = interface;
|
ICefMediaRoute = interface;
|
||||||
ICefMediaRouteCreateCallback = interface;
|
ICefMediaRouteCreateCallback = interface;
|
||||||
ICefMediaSink = interface;
|
ICefMediaSink = interface;
|
||||||
|
ICefMediaSinkDeviceInfoCallback = interface;
|
||||||
ICefMediaSource = interface;
|
ICefMediaSource = interface;
|
||||||
ICefAudioHandler = interface;
|
ICefAudioHandler = interface;
|
||||||
ICefDevToolsMessageObserver = interface;
|
ICefDevToolsMessageObserver = interface;
|
||||||
@ -248,7 +249,7 @@ type
|
|||||||
TOnDownloadImageFinishedProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const imageUrl: ustring; httpStatusCode: Integer; const image: ICefImage);
|
TOnDownloadImageFinishedProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const imageUrl: ustring; httpStatusCode: Integer; const image: ICefImage);
|
||||||
TCefCookieVisitorProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} function(const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count, total: Integer; same_site : TCefCookieSameSite; priority : TCefCookiePriority; out deleteCookie: Boolean): Boolean;
|
TCefCookieVisitorProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} function(const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count, total: Integer; same_site : TCefCookieSameSite; priority : TCefCookiePriority; out deleteCookie: Boolean): Boolean;
|
||||||
TCefMediaRouteCreateCallbackProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(result: TCefMediaRouterCreateResult; const error: ustring; const route: ICefMediaRoute);
|
TCefMediaRouteCreateCallbackProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(result: TCefMediaRouterCreateResult; const error: ustring; const route: ICefMediaRoute);
|
||||||
|
TCefMediaSinkDeviceInfoCallbackProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const ip_address: ustring; port: integer; const model_name: ustring);
|
||||||
|
|
||||||
// *******************************************
|
// *******************************************
|
||||||
// ************ Custom interfaces ************
|
// ************ Custom interfaces ************
|
||||||
@ -464,6 +465,7 @@ type
|
|||||||
procedure doSetZoomStep(aValue : byte);
|
procedure doSetZoomStep(aValue : byte);
|
||||||
procedure doReadZoom;
|
procedure doReadZoom;
|
||||||
procedure doMediaRouteCreateFinished(result: TCefMediaRouterCreateResult; const error: ustring; const route: ICefMediaRoute);
|
procedure doMediaRouteCreateFinished(result: TCefMediaRouterCreateResult; const error: ustring; const route: ICefMediaRoute);
|
||||||
|
procedure doOnMediaSinkDeviceInfo(const ip_address: ustring; port: integer; const model_name: ustring);
|
||||||
function MustCreateAudioHandler : boolean;
|
function MustCreateAudioHandler : boolean;
|
||||||
function MustCreateLoadHandler : boolean;
|
function MustCreateLoadHandler : boolean;
|
||||||
function MustCreateFocusHandler : boolean;
|
function MustCreateFocusHandler : boolean;
|
||||||
@ -1366,6 +1368,12 @@ type
|
|||||||
procedure OnMediaRouteCreateFinished(result: TCefMediaRouterCreateResult; const error: ustring; const route: ICefMediaRoute);
|
procedure OnMediaRouteCreateFinished(result: TCefMediaRouterCreateResult; const error: ustring; const route: ICefMediaRoute);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
//
|
||||||
|
ICefMediaSinkDeviceInfoCallback = interface(ICefBaseRefCounted)
|
||||||
|
['{633898DD-4169-45D0-ADDD-6E68B3686E0D}']
|
||||||
|
procedure OnMediaSinkDeviceInfo(const ip_address: ustring; port: integer; const model_name: ustring);
|
||||||
|
end;
|
||||||
|
|
||||||
// TCefMediaSink
|
// TCefMediaSink
|
||||||
// /include/capi/cef_media_router_capi.h (cef_media_sink_t)
|
// /include/capi/cef_media_router_capi.h (cef_media_sink_t)
|
||||||
ICefMediaSink = interface(ICefBaseRefCounted)
|
ICefMediaSink = interface(ICefBaseRefCounted)
|
||||||
@ -1375,6 +1383,7 @@ type
|
|||||||
function GetName: ustring;
|
function GetName: ustring;
|
||||||
function GetDescription: ustring;
|
function GetDescription: ustring;
|
||||||
function GetIconType: TCefMediaSinkIconType;
|
function GetIconType: TCefMediaSinkIconType;
|
||||||
|
procedure GetDeviceInfo(const callback: ICefMediaSinkDeviceInfoCallback);
|
||||||
function IsCastSink: boolean;
|
function IsCastSink: boolean;
|
||||||
function IsDialSink: boolean;
|
function IsDialSink: boolean;
|
||||||
function IsCompatibleWith(const source: ICefMediaSource): boolean;
|
function IsCompatibleWith(const source: ICefMediaSource): boolean;
|
||||||
|
@ -180,7 +180,4 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
@ -59,6 +59,7 @@ type
|
|||||||
function GetName: ustring;
|
function GetName: ustring;
|
||||||
function GetDescription: ustring;
|
function GetDescription: ustring;
|
||||||
function GetIconType: TCefMediaSinkIconType;
|
function GetIconType: TCefMediaSinkIconType;
|
||||||
|
procedure GetDeviceInfo(const callback: ICefMediaSinkDeviceInfoCallback);
|
||||||
function IsCastSink: boolean;
|
function IsCastSink: boolean;
|
||||||
function IsDialSink: boolean;
|
function IsDialSink: boolean;
|
||||||
function IsCompatibleWith(const source: ICefMediaSource): boolean;
|
function IsCompatibleWith(const source: ICefMediaSource): boolean;
|
||||||
@ -96,6 +97,11 @@ begin
|
|||||||
Result := PCefMediaSink(FData)^.get_icon_type(PCefMediaSink(FData));
|
Result := PCefMediaSink(FData)^.get_icon_type(PCefMediaSink(FData));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCefMediaSinkRef.GetDeviceInfo(const callback: ICefMediaSinkDeviceInfoCallback);
|
||||||
|
begin
|
||||||
|
PCefMediaSink(FData)^.get_device_info(PCefMediaSink(FData), CefGetData(callback));
|
||||||
|
end;
|
||||||
|
|
||||||
function TCefMediaSinkRef.IsCastSink: Boolean;
|
function TCefMediaSinkRef.IsCastSink: Boolean;
|
||||||
begin
|
begin
|
||||||
Result := PCefMediaSink(FData)^.is_cast_sink(PCefMediaSink(FData)) <> 0;
|
Result := PCefMediaSink(FData)^.is_cast_sink(PCefMediaSink(FData)) <> 0;
|
||||||
|
177
source/uCEFMediaSinkDeviceInfoCallback.pas
Normal file
177
source/uCEFMediaSinkDeviceInfoCallback.pas
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
// ************************************************************************
|
||||||
|
// ***************************** CEF4Delphi *******************************
|
||||||
|
// ************************************************************************
|
||||||
|
//
|
||||||
|
// CEF4Delphi is based on DCEF3 which uses CEF to embed a chromium-based
|
||||||
|
// browser in Delphi applications.
|
||||||
|
//
|
||||||
|
// The original license of DCEF3 still applies to CEF4Delphi.
|
||||||
|
//
|
||||||
|
// For more information about CEF4Delphi visit :
|
||||||
|
// https://www.briskbard.com/index.php?lang=en&pageid=cef
|
||||||
|
//
|
||||||
|
// Copyright © 2020 Salvador Diaz Fau. All rights reserved.
|
||||||
|
//
|
||||||
|
// ************************************************************************
|
||||||
|
// ************ vvvv Original license and comments below vvvv *************
|
||||||
|
// ************************************************************************
|
||||||
|
(*
|
||||||
|
* Delphi Chromium Embedded 3
|
||||||
|
*
|
||||||
|
* Usage allowed under the restrictions of the Lesser GNU General Public License
|
||||||
|
* or alternatively the restrictions of the Mozilla Public License 1.1
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
|
||||||
|
* the specific language governing rights and limitations under the License.
|
||||||
|
*
|
||||||
|
* Unit owner : Henri Gourvest <hgourvest@gmail.com>
|
||||||
|
* Web site : http://www.progdigy.com
|
||||||
|
* Repository : http://code.google.com/p/delphichromiumembedded/
|
||||||
|
* Group : http://groups.google.com/group/delphichromiumembedded
|
||||||
|
*
|
||||||
|
* Embarcadero Technologies, Inc is not permitted to use or redistribute
|
||||||
|
* this source code without explicit permission.
|
||||||
|
*
|
||||||
|
*)
|
||||||
|
|
||||||
|
unit uCEFMediaSinkDeviceInfoCallback;
|
||||||
|
|
||||||
|
{$IFDEF FPC}
|
||||||
|
{$MODE OBJFPC}{$H+}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFNDEF CPUX64}{$ALIGN ON}{$ENDIF}
|
||||||
|
{$MINENUMSIZE 4}
|
||||||
|
|
||||||
|
{$I cef.inc}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes;
|
||||||
|
|
||||||
|
type
|
||||||
|
TCefMediaSinkDeviceInfoCallbackOwn = class(TCefBaseRefCountedOwn, ICefMediaSinkDeviceInfoCallback)
|
||||||
|
protected
|
||||||
|
procedure OnMediaSinkDeviceInfo(const ip_address: ustring; port: integer; const model_name: ustring); virtual; abstract;
|
||||||
|
public
|
||||||
|
constructor Create; virtual;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TCefFastMediaSinkDeviceInfoCallback = class(TCefMediaSinkDeviceInfoCallbackOwn)
|
||||||
|
protected
|
||||||
|
FCallback: TCefMediaSinkDeviceInfoCallbackProc;
|
||||||
|
|
||||||
|
procedure OnMediaSinkDeviceInfo(const ip_address: ustring; port: integer; const model_name: ustring); override;
|
||||||
|
public
|
||||||
|
constructor Create(const callback: TCefMediaSinkDeviceInfoCallbackProc); reintroduce;
|
||||||
|
destructor Destroy; override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TCefCustomMediaSinkDeviceInfoCallback = class(TCefMediaSinkDeviceInfoCallbackOwn)
|
||||||
|
protected
|
||||||
|
FEvents : Pointer;
|
||||||
|
|
||||||
|
procedure OnMediaSinkDeviceInfo(const ip_address: ustring; port: integer; const model_name: ustring); override;
|
||||||
|
public
|
||||||
|
constructor Create(const aEvents : IChromiumEvents); reintroduce;
|
||||||
|
destructor Destroy; override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFDEF DELPHI16_UP}
|
||||||
|
System.SysUtils,
|
||||||
|
{$ELSE}
|
||||||
|
SysUtils,
|
||||||
|
{$ENDIF}
|
||||||
|
uCEFMiscFunctions, uCEFLibFunctions, uCEFMediaSink;
|
||||||
|
|
||||||
|
procedure cef_media_sink_device_info_callback_on_media_sink_device_info(self : PCefMediaSinkDeviceInfoCallback;
|
||||||
|
device_info : PCefMediaSinkDeviceInfo); stdcall;
|
||||||
|
var
|
||||||
|
TempObject : TObject;
|
||||||
|
begin
|
||||||
|
TempObject := CefGetObject(self);
|
||||||
|
|
||||||
|
if (TempObject <> nil) and (TempObject is TCefMediaSinkDeviceInfoCallbackOwn) then
|
||||||
|
TCefMediaSinkDeviceInfoCallbackOwn(TempObject).OnMediaSinkDeviceInfo(CefString(@device_info^.ip_address),
|
||||||
|
device_info^.port,
|
||||||
|
CefString(@device_info^.model_name));
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
// ****************************************************************
|
||||||
|
// ************** TCefMediaSinkDeviceInfoCallbackOwn **************
|
||||||
|
// ****************************************************************
|
||||||
|
|
||||||
|
constructor TCefMediaSinkDeviceInfoCallbackOwn.Create;
|
||||||
|
begin
|
||||||
|
inherited CreateData(SizeOf(TCefMediaSinkDeviceInfoCallback));
|
||||||
|
|
||||||
|
PCefMediaSinkDeviceInfoCallback(FData)^.on_media_sink_device_info :=
|
||||||
|
{$IFDEF FPC}@{$ENDIF}cef_media_sink_device_info_callback_on_media_sink_device_info;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
// *****************************************************************
|
||||||
|
// ************** TCefFastMediaSinkDeviceInfoCallback **************
|
||||||
|
// *****************************************************************
|
||||||
|
|
||||||
|
constructor TCefFastMediaSinkDeviceInfoCallback.Create(const callback: TCefMediaSinkDeviceInfoCallbackProc);
|
||||||
|
begin
|
||||||
|
inherited Create;
|
||||||
|
|
||||||
|
FCallback := callback;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCefFastMediaSinkDeviceInfoCallback.OnMediaSinkDeviceInfo(const ip_address: ustring; port: integer; const model_name: ustring);
|
||||||
|
begin
|
||||||
|
if assigned(FCallback) then
|
||||||
|
FCallback(ip_address, port, model_name);
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TCefFastMediaSinkDeviceInfoCallback.Destroy;
|
||||||
|
begin
|
||||||
|
FCallback := nil;
|
||||||
|
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
// *******************************************************************
|
||||||
|
// ************** TCefCustomMediaSinkDeviceInfoCallback **************
|
||||||
|
// *******************************************************************
|
||||||
|
|
||||||
|
constructor TCefCustomMediaSinkDeviceInfoCallback.Create(const aEvents : IChromiumEvents);
|
||||||
|
begin
|
||||||
|
inherited Create;
|
||||||
|
|
||||||
|
FEvents := Pointer(aEvents);
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TCefCustomMediaSinkDeviceInfoCallback.Destroy;
|
||||||
|
begin
|
||||||
|
FEvents := nil;
|
||||||
|
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCefCustomMediaSinkDeviceInfoCallback.OnMediaSinkDeviceInfo(const ip_address: ustring; port: integer; const model_name: ustring);
|
||||||
|
begin
|
||||||
|
try
|
||||||
|
try
|
||||||
|
if (FEvents <> nil) then
|
||||||
|
IChromiumEvents(FEvents).doOnMediaSinkDeviceInfo(ip_address, port, model_name);
|
||||||
|
except
|
||||||
|
on e : exception do
|
||||||
|
if CustomExceptionHandler('TCefCustomMediaSinkDeviceInfoCallback.OnMediaSinkDeviceInfo', e) then raise;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
FEvents := nil;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
@ -246,7 +246,9 @@ type
|
|||||||
PCefMediaObserver = ^TCefMediaObserver;
|
PCefMediaObserver = ^TCefMediaObserver;
|
||||||
PCefMediaSink = ^TCefMediaSink;
|
PCefMediaSink = ^TCefMediaSink;
|
||||||
PPCefMediaSink = ^PCefMediaSink;
|
PPCefMediaSink = ^PCefMediaSink;
|
||||||
|
PCefMediaSinkDeviceInfoCallback = ^TCefMediaSinkDeviceInfoCallback;
|
||||||
PCefMediaSource = ^TCefMediaSource;
|
PCefMediaSource = ^TCefMediaSource;
|
||||||
|
PCefMediaSinkDeviceInfo = ^TCefMediaSinkDeviceInfo;
|
||||||
|
|
||||||
{$IFDEF LINUX}
|
{$IFDEF LINUX}
|
||||||
PXEvent = Pointer;
|
PXEvent = Pointer;
|
||||||
@ -1421,6 +1423,13 @@ type
|
|||||||
frames_per_buffer : integer;
|
frames_per_buffer : integer;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
// /include/internal/cef_types.h (cef_media_sink_device_info_t)
|
||||||
|
TCefMediaSinkDeviceInfo = record
|
||||||
|
ip_address : TCefString;
|
||||||
|
port : integer;
|
||||||
|
model_name : TCefString;
|
||||||
|
end;
|
||||||
|
|
||||||
// /include/capi/cef_base_capi.h (cef_base_ref_counted_t)
|
// /include/capi/cef_base_capi.h (cef_base_ref_counted_t)
|
||||||
TCefBaseRefCounted = record
|
TCefBaseRefCounted = record
|
||||||
size : NativeUInt;
|
size : NativeUInt;
|
||||||
@ -1649,11 +1658,18 @@ type
|
|||||||
get_name : function(self: PCefMediaSink): PCefStringUserFree; stdcall;
|
get_name : function(self: PCefMediaSink): PCefStringUserFree; stdcall;
|
||||||
get_description : function(self: PCefMediaSink): PCefStringUserFree; stdcall;
|
get_description : function(self: PCefMediaSink): PCefStringUserFree; stdcall;
|
||||||
get_icon_type : function(self: PCefMediaSink): TCefMediaSinkIconType; stdcall;
|
get_icon_type : function(self: PCefMediaSink): TCefMediaSinkIconType; stdcall;
|
||||||
|
get_device_info : procedure(self: PCefMediaSink; callback: PCefMediaSinkDeviceInfoCallback); stdcall;
|
||||||
is_cast_sink : function(self: PCefMediaSink): Integer; stdcall;
|
is_cast_sink : function(self: PCefMediaSink): Integer; stdcall;
|
||||||
is_dial_sink : function(self: PCefMediaSink): Integer; stdcall;
|
is_dial_sink : function(self: PCefMediaSink): Integer; stdcall;
|
||||||
is_compatible_with : function(self: PCefMediaSink; source: PCefMediaSource): Integer; stdcall;
|
is_compatible_with : function(self: PCefMediaSink; source: PCefMediaSource): Integer; stdcall;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
// /include/capi/cef_media_router_capi.h (cef_media_sink_device_info_callback_t)
|
||||||
|
TCefMediaSinkDeviceInfoCallback = record
|
||||||
|
base : TCefBaseRefCounted;
|
||||||
|
on_media_sink_device_info : procedure(self: PCefMediaSinkDeviceInfoCallback; device_info: PCefMediaSinkDeviceInfo); stdcall;
|
||||||
|
end;
|
||||||
|
|
||||||
// /include/capi/cef_media_router_capi.h (cef_media_source_t)
|
// /include/capi/cef_media_router_capi.h (cef_media_source_t)
|
||||||
TCefMediaSource = record
|
TCefMediaSource = record
|
||||||
base : TCefBaseRefCounted;
|
base : TCefBaseRefCounted;
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
"UpdateLazPackages" : [
|
"UpdateLazPackages" : [
|
||||||
{
|
{
|
||||||
"ForceNotify" : true,
|
"ForceNotify" : true,
|
||||||
"InternalVersion" : 160,
|
"InternalVersion" : 161,
|
||||||
"Name" : "cef4delphi_lazarus.lpk",
|
"Name" : "cef4delphi_lazarus.lpk",
|
||||||
"Version" : "83.4.2.0"
|
"Version" : "83.5.0.0"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"UpdatePackageData" : {
|
"UpdatePackageData" : {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user