1+ unit CameraConfigUtils;
2+
3+ interface
4+
5+ uses
6+ System.SysUtils,
7+ Androidapi.JNIBridge,
8+ Androidapi.JNI.Hardware,
9+ Androidapi.JNI.JavaTypes,
10+ Androidapi.Helpers,
11+ Androidapi.Log;
12+
13+ type
14+ TCameraConfigUtils = class sealed
15+ private
16+ class var Tms: TMarshaller;
17+ class function findSettableValue (name : string; const supportedValues: JList;
18+ desiredValues: TArray<JString>): JString;
19+ public
20+ class procedure setVideoStabilization (parameters
21+ : JCamera_Parameters); static;
22+ class procedure setBarcodeSceneMode (parameters: JCamera_Parameters); static;
23+ class procedure setFocus (parameters: JCamera_Parameters; autoFocus, disableContinuous,
24+ safeMode: Boolean);
25+ end ;
26+
27+
28+ implementation
29+
30+ class function TCameraConfigUtils.findSettableValue (name : string;
31+ const supportedValues: JList; desiredValues: TArray<JString>): JString;
32+ var
33+ desiredValue: JString;
34+ s: string;
35+ I: Integer;
36+ begin
37+ if supportedValues <> nil then
38+ begin
39+ for desiredValue in desiredValues do
40+ begin
41+ if supportedValues.contains(desiredValue) then
42+ Exit(desiredValue);
43+ end ;
44+ end ;
45+ Result := nil ;
46+ end ;
47+
48+
49+ class procedure TCameraConfigUtils.setVideoStabilization
50+ (parameters: JCamera_Parameters);
51+ begin
52+ if (parameters.isVideoStabilizationSupported()) then
53+ begin
54+ if (parameters.getVideoStabilization()) then
55+ begin
56+ // Log.i(TAG, "Video stabilization already enabled");
57+ end
58+ else
59+ begin
60+ // Log.i(TAG, "Enabling video stabilization...");
61+ parameters.setVideoStabilization(true);
62+ end ;
63+ end
64+ else
65+ begin
66+ // Log.i(TAG, "This device does not support video stabilization");
67+ end ;
68+ end ;
69+
70+ class procedure TCameraConfigUtils.setBarcodeSceneMode
71+ (parameters: JCamera_Parameters);
72+ var
73+ sceneMode: JString;
74+ begin
75+ if SameText(JStringToString(parameters.getSceneMode),
76+ JStringToString(TJCamera_Parameters.JavaClass.SCENE_MODE_BARCODE)) then
77+ begin
78+ // Log.i(TAG, "Barcode scene mode already set");
79+ Exit;
80+ end ;
81+ sceneMode := findSettableValue(' scene mode' ,
82+ parameters.getSupportedSceneModes(),
83+ [TJCamera_Parameters.JavaClass.SCENE_MODE_BARCODE]);
84+ if (sceneMode <> nil ) then
85+ parameters.setSceneMode(sceneMode);
86+ end ;
87+
88+ class procedure TCameraConfigUtils.setFocus
89+ (parameters: JCamera_Parameters; autoFocus, disableContinuous,
90+ safeMode: Boolean);
91+ var
92+ supportedFocusModes: JList;
93+ focusMode: JString;
94+ begin
95+ supportedFocusModes := parameters.getSupportedFocusModes();
96+ focusMode := nil ;
97+ if (autoFocus) then
98+ begin
99+ if (safeMode or disableContinuous) then
100+ begin
101+ focusMode := findSettableValue(' focus mode' , supportedFocusModes,
102+ [TJCamera_Parameters.JavaClass.FOCUS_MODE_AUTO]);
103+ end
104+ else
105+ begin
106+ focusMode := findSettableValue(' focus mode' , supportedFocusModes,
107+ [// TJCamera_Parameters.JavaClass.FOCUS_MODE_MACRO,
108+ TJCamera_Parameters.JavaClass.FOCUS_MODE_CONTINUOUS_PICTURE,
109+ TJCamera_Parameters.JavaClass.FOCUS_MODE_CONTINUOUS_VIDEO,
110+ TJCamera_Parameters.JavaClass.FOCUS_MODE_AUTO]);
111+ end ;
112+ end ;
113+ // Maybe selected auto-focus but not available, so fall through here:
114+ if (not safeMode) and (focusMode = nil ) then
115+ begin
116+ focusMode := findSettableValue(' focus mode' , supportedFocusModes,
117+ [TJCamera_Parameters.JavaClass.FOCUS_MODE_MACRO,
118+ TJCamera_Parameters.JavaClass.FOCUS_MODE_EDOF]);
119+ end ;
120+ if (focusMode <> nil ) then
121+ begin
122+ if (focusMode.equals(parameters.getFocusMode())) then
123+ begin
124+ Logi(Tms.asAnsi(' Focus mode already set to ' + JStringToString(focusMode))
125+ .ToPointer);
126+ end
127+ else
128+ begin
129+ parameters.setFocusMode(focusMode);
130+ end ;
131+ end ;
132+ end ;
133+
134+ end .
135+
0 commit comments