From 36c36ec61ac829774d808d0e1f3e513915233906 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Van=20Canneyt?= Date: Thu, 27 Feb 2025 21:26:45 +0100 Subject: [PATCH] * Add various media classes --- packages/rtl/src/web.pas | 83 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 82 insertions(+), 1 deletion(-) diff --git a/packages/rtl/src/web.pas b/packages/rtl/src/web.pas index 90d87c0..0f39652 100644 --- a/packages/rtl/src/web.pas +++ b/packages/rtl/src/web.pas @@ -1390,17 +1390,98 @@ Type end; TJSMediaStreamTrack = class external name 'MediaStreamTrack' (TJSEventTarget) + procedure stop; + function getCapabilities : TJSObject; + function getSettings : TJSObject; end; + + TJSMediaStreamTrackProc = reference to procedure (aMediaStreamTrack : TJSMediaStreamTrack); + + TJSMediaStreamTracks = class external name 'Array' (TJSArray) + procedure forEach(const aCallBack : TJSMediaStreamTrackProc); overload; + end; + TJSMediaConstraints = class external name 'Object' (TJSObject) video : boolean; audio : boolean; end; + TJSMediaStream = class external name 'MediaStream' (TJSEventTarget) + Public + procedure addTrack(aTrack : TJSMediaStreamTrack); + function clone : TJSMediaStream; + function getTrackById(aID : String) : TJSMediaStreamTrack; + function getVideoTracks : TJSMediaStreamTracks; + function getTracks : TJSMediaStreamTracks; + procedure removeTrack(aTrack : TJSMediaStreamTrack); + end; + + { TJSMediaDeviceInfo } + + TJSMediaDeviceInfo = class external name 'MediaDeviceInfo' (TJSObject) + private + FDeviceID: string; external name 'deviceId'; + FGroupID: string; external name 'groupId'; + FKind: string; external name 'kind'; + FLabel: string; external name 'label'; + Public + property deviceId : string read FDeviceID; + property groupId : string read FGroupID; + property kind : string read FKind; + property label_ : string read FLabel; + end; + + TJSMediaDeviceInfoProc = reference to procedure (aMediaStreamTrack : TJSMediaStreamTrack); + + { TJSMediaDeviceInfoArray } + + TJSMediaDeviceInfoArray = class external name 'Array' (TJSArray) + private + function GetDevices(Index: NativeInt): TJSMediaDeviceInfo; external name '[]'; + procedure SetDevices(Index: NativeInt; const aValue: TJSMediaDeviceInfo); external name '[]'; + public + procedure forEach(const aCallBack : TJSMediaDeviceInfoProc); overload; + property Devices[Index: NativeInt]: TJSMediaDeviceInfo read GetDevices write SetDevices; default; + end; + + TJSMediaTrackSupportedConstraints = class external name 'MediaTrackSupportedConstraints' (TJSObject) + autoGainControl : boolean; + width : boolean; + height : boolean; + aspectRation : Boolean; + frameRate : Boolean; + resizeMode : boolean; + volume : boolean; + sampleRate : boolean; + sampleSize : Boolean; + echoCancellation : Boolean; + latency : boolean; + noiseSuppression : boolean; + channelCount : boolean; + deviceId : boolean; + groupId : boolean; + displaySurface : boolean; + logicalSurface : boolean; + end; + + TJSMediaTrackSupportedConstraintsProc = reference to procedure(aConstraints :TJSMediaTrackSupportedConstraints); + + TJSMediaTrackSupportedConstraintsArray = class external name 'Array' (TJSArray) + private + function GetConstraint(Index: NativeInt): TJSMediaTrackSupportedConstraints; external name '[]'; + procedure SetConstraint(Index: NativeInt; const aValue: TJSMediaTrackSupportedConstraints); external name '[]'; + public + procedure forEach(const aCallBack : TJSMediaTrackSupportedConstraintsProc); overload; + property Constraints[Index: NativeInt]: TJSMediaTrackSupportedConstraints read GetConstraint write SetConstraint; default; + end; + TJSMediaDevices = class external name 'MediaDevices' (TJSEventTarget) + function enumerateDevices : TJSMediaDeviceInfoArray; async; + function getSupportedConstraints : TJSMediaTrackSupportedConstraintsArray; function getDisplayMedia: TJSPromise; function getDisplayMedia(options : TJSObject) : TJSPromise; overload; function getDisplayMedia(options : TJSMediaConstraints) : TJSPromise; overload; - Function getUserMedia(aConstraint : TJSOBject) : TJSPromise; + function selectAudioOutput : TJSMediaDeviceInfo; async; end;