1 /*
2  * Copyright 2021 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package androidx.camera.extensions.impl.advanced;
18 
19 import android.hardware.camera2.CameraDevice;
20 import android.hardware.camera2.CaptureRequest;
21 
22 import androidx.annotation.NonNull;
23 
24 import java.util.ArrayList;
25 import java.util.HashMap;
26 import java.util.List;
27 import java.util.Map;
28 
29 public class RequestBuilder {
30     List<Integer> mTargetOutputConfigIds = new ArrayList<>();
31     Map<CaptureRequest.Key<?>, Object> mParameters = new HashMap<>();
32     int mTemplateId = CameraDevice.TEMPLATE_PREVIEW;
33     int mCaptureStageId;
34 
RequestBuilder()35     public RequestBuilder() {
36     }
37 
RequestBuilder(int targetOutputConfigId, int templateId, int captureStageId)38     public RequestBuilder(int targetOutputConfigId, int templateId, int captureStageId) {
39         addTargetOutputConfigIds(targetOutputConfigId);
40         setTemplateId(templateId);
41         setCaptureStageId(captureStageId);
42     }
43 
44     @NonNull
addTargetOutputConfigIds(int targetOutputConfigId)45     public RequestBuilder addTargetOutputConfigIds(int targetOutputConfigId) {
46         mTargetOutputConfigIds.add(targetOutputConfigId);
47         return this;
48     }
49 
50     @NonNull
setParameters(@onNull CaptureRequest.Key<?> key, @NonNull Object value)51     public RequestBuilder setParameters(@NonNull CaptureRequest.Key<?> key,
52             @NonNull Object value) {
53         mParameters.put(key, value);
54         return this;
55     }
56 
57     @NonNull
setTemplateId(int templateId)58     public RequestBuilder setTemplateId(int templateId) {
59         mTemplateId = templateId;
60         return this;
61     }
62 
63     @NonNull
setCaptureStageId(int captureStageId)64     public RequestBuilder setCaptureStageId(int captureStageId) {
65         mCaptureStageId = captureStageId;
66         return this;
67     }
68 
69     @NonNull
build()70     public RequestProcessorImpl.Request build() {
71         return new RequestProcessorRequest(
72                 mTargetOutputConfigIds, mParameters, mTemplateId, mCaptureStageId);
73     }
74 
75     static class RequestProcessorRequest implements RequestProcessorImpl.Request {
76         final List<Integer> mTargetOutputConfigIds;
77         final Map<CaptureRequest.Key<?>, Object> mParameters;
78         final int mTemplateId;
79         final int mCaptureStageId;
80 
RequestProcessorRequest(List<Integer> targetOutputConfigIds, Map<CaptureRequest.Key<?>, Object> parameters, int templateId, int captureStageId)81         RequestProcessorRequest(List<Integer> targetOutputConfigIds,
82                 Map<CaptureRequest.Key<?>, Object> parameters,
83                 int templateId,
84                 int captureStageId) {
85             mTargetOutputConfigIds = targetOutputConfigIds;
86             mParameters = parameters;
87             mTemplateId = templateId;
88             mCaptureStageId = captureStageId;
89         }
90 
91         @Override
getTargetOutputConfigIds()92         public List<Integer> getTargetOutputConfigIds() {
93             return mTargetOutputConfigIds;
94         }
95 
96         @Override
getParameters()97         public Map<CaptureRequest.Key<?>, Object> getParameters() {
98             return mParameters;
99         }
100 
101         @Override
getTemplateId()102         public Integer getTemplateId() {
103             return mTemplateId;
104         }
105 
getCaptureStageId()106         public int getCaptureStageId() {
107             return mCaptureStageId;
108         }
109     }
110 }