Skip to content
This repository was archived by the owner on Aug 29, 2023. It is now read-only.

Commit cd8f806

Browse files
committed
update: autofocus
1 parent 081b79b commit cd8f806

File tree

11 files changed

+357
-738
lines changed

11 files changed

+357
-738
lines changed

AdvancedTestApp/.gitignore

Lines changed: 0 additions & 57 deletions
This file was deleted.
-32 Bytes
Binary file not shown.

AdvancedTestApp/CameraConfigUtils.pas

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
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+

AdvancedTestApp/FmxAdvancedTestApp.dpr

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,11 @@ uses
8080
ZXing.OneD.UPCAReader in '..\Lib\Classes\1D Barcodes\ZXing.OneD.UPCAReader.pas',
8181
ZXing.OneD.Code39Reader in '..\Lib\Classes\1D Barcodes\ZXing.OneD.Code39Reader.pas',
8282
ZXing.OneD.UPCEReader in '..\Lib\Classes\1D Barcodes\ZXing.OneD.UPCEReader.pas',
83-
AudioManager in 'AudioManager\AudioManager.pas' {$R *.res};
83+
AudioManager in 'AudioManager\AudioManager.pas' {$R *.res}
84+
{$IFDEF ANDROID}
85+
, CameraConfigUtils in 'CameraConfigUtils.pas'
86+
{$ENDIF}
87+
;
8488

8589
{$R *.res}
8690
{$ASSERTIONS OFF}

0 commit comments

Comments
 (0)