17
17
package com .googleresearch .capturesync ;
18
18
19
19
import static android .hardware .camera2 .CameraDevice .TEMPLATE_PREVIEW ;
20
+ import static android .hardware .camera2 .CameraDevice .TEMPLATE_MANUAL ;
20
21
import static android .hardware .camera2 .CameraMetadata .CONTROL_AE_MODE_OFF ;
21
- import static android .hardware .camera2 .CameraMetadata .CONTROL_AF_MODE_AUTO ;
22
+
23
+ import static android .hardware .camera2 .CameraMetadata .CONTROL_AF_MODE_OFF ;
24
+ import static android .hardware .camera2 .CameraMetadata .CONTROL_AF_TRIGGER_CANCEL ;
25
+
22
26
import static android .hardware .camera2 .CameraMetadata .CONTROL_AWB_MODE_AUTO ;
23
27
import static android .hardware .camera2 .CameraMetadata .CONTROL_MODE_AUTO ;
24
28
import static android .hardware .camera2 .CaptureRequest .CONTROL_AE_MODE ;
25
29
import static android .hardware .camera2 .CaptureRequest .CONTROL_AF_MODE ;
26
30
import static android .hardware .camera2 .CaptureRequest .CONTROL_AF_MODE_CONTINUOUS_PICTURE ;
31
+ import static android .hardware .camera2 .CaptureRequest .CONTROL_AF_TRIGGER ;
27
32
import static android .hardware .camera2 .CaptureRequest .CONTROL_AWB_MODE ;
28
33
import static android .hardware .camera2 .CaptureRequest .CONTROL_MODE ;
34
+ import static android .hardware .camera2 .CaptureRequest .LENS_FOCUS_DISTANCE ;
29
35
import static android .hardware .camera2 .CaptureRequest .SENSOR_EXPOSURE_TIME ;
30
36
import static android .hardware .camera2 .CaptureRequest .SENSOR_SENSITIVITY ;
31
37
32
38
import android .hardware .camera2 .CameraAccessException ;
33
39
import android .hardware .camera2 .CameraDevice ;
34
40
import android .hardware .camera2 .CaptureRequest ;
35
41
import android .view .Surface ;
42
+ import android .widget .Toast ;
43
+
36
44
import com .googleresearch .capturesync .ImageMetadataSynchronizer .CaptureRequestTag ;
37
45
import java .util .ArrayList ;
38
46
import java .util .List ;
@@ -55,27 +63,23 @@ public CaptureRequest.Builder makePreview(
55
63
List <Surface > imageSurfaces ,
56
64
long sensorExposureTimeNs ,
57
65
int sensorSensitivity ,
58
- boolean wantAutoExp )
66
+ boolean wantAutoExp , boolean enableFocus )
59
67
throws CameraAccessException {
60
68
61
69
CaptureRequest .Builder builder = device .createCaptureRequest (TEMPLATE_PREVIEW );
62
70
if (wantAutoExp ) {
63
71
builder .set (CONTROL_AE_MODE , CONTROL_AWB_MODE_AUTO );
64
-
65
72
} else {
66
73
// Manually set exposure and sensitivity using UI sliders on the leader.
67
74
builder .set (CONTROL_AE_MODE , CONTROL_AE_MODE_OFF );
68
75
builder .set (SENSOR_EXPOSURE_TIME , sensorExposureTimeNs );
69
76
builder .set (SENSOR_SENSITIVITY , sensorSensitivity );
70
77
}
71
-
78
+ builder .set (CONTROL_AF_TRIGGER , CONTROL_AF_TRIGGER_CANCEL );
79
+ builder .set (CONTROL_AF_MODE , CONTROL_AF_MODE_OFF );
72
80
// Auto white balance used, these could be locked and sent from the leader instead.
73
81
builder .set (CONTROL_AWB_MODE , CONTROL_AWB_MODE_AUTO );
74
82
75
- // Auto focus is used since different devices may have different manual focus values.
76
- //builder.set(CONTROL_AF_MODE, CONTROL_AF_MODE_CONTINUOUS_PICTURE);
77
- builder .set (CONTROL_AF_MODE , CONTROL_AF_MODE_AUTO );
78
-
79
83
if (viewfinderSurface != null ) {
80
84
builder .addTarget (viewfinderSurface );
81
85
}
@@ -88,6 +92,7 @@ public CaptureRequest.Builder makePreview(
88
92
return builder ;
89
93
}
90
94
95
+
91
96
/**
92
97
* An alternative capture request for video,
93
98
* includes everything from preview + mediaRecorder
@@ -98,9 +103,9 @@ public CaptureRequest.Builder makeVideo(
98
103
List <Surface > imageSurfaces ,
99
104
long sensorExposureTimeNs ,
100
105
int sensorSensitivity ,
101
- boolean wantAutoExp )
106
+ boolean wantAutoExp , boolean enableFocus )
102
107
throws CameraAccessException {
103
- CaptureRequest .Builder builder = makePreview (viewfinderSurface , imageSurfaces , sensorExposureTimeNs , sensorSensitivity , wantAutoExp );
108
+ CaptureRequest .Builder builder = makePreview (viewfinderSurface , imageSurfaces , sensorExposureTimeNs , sensorSensitivity , wantAutoExp , enableFocus );
104
109
// Add recorder surface
105
110
if (recorderSurface != null ) {
106
111
builder .addTarget (recorderSurface );
@@ -111,10 +116,13 @@ public CaptureRequest.Builder makeVideo(
111
116
112
117
public CaptureRequest .Builder makeFrameInjectionRequest (
113
118
long desiredExposureTimeNs , List <Surface > imageSurfaces ) throws CameraAccessException {
119
+
114
120
CaptureRequest .Builder builder = device .createCaptureRequest (TEMPLATE_PREVIEW );
115
121
builder .set (CONTROL_MODE , CONTROL_MODE_AUTO );
116
122
builder .set (CONTROL_AE_MODE , CONTROL_AE_MODE_OFF );
117
123
builder .set (SENSOR_EXPOSURE_TIME , desiredExposureTimeNs );
124
+ builder .set (CONTROL_AF_TRIGGER , CONTROL_AF_TRIGGER_CANCEL );
125
+ builder .set (CONTROL_AF_MODE , CONTROL_AF_MODE_OFF );
118
126
// TODO: Inserting frame duration directly would be more accurate than inserting exposure since
119
127
// {@code frame duration ~ exposure + variable overhead}. However setting frame duration may not
120
128
// be supported on many android devices, so we use exposure time here.
0 commit comments