1 /* 2 * Copyright 2022 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.internal.sessionprocessor; 18 19 import android.hardware.camera2.CameraDevice; 20 import android.hardware.camera2.CaptureRequest; 21 22 import androidx.camera.core.impl.Config; 23 import androidx.camera.core.impl.RequestProcessor; 24 import androidx.camera.extensions.internal.RequestOptionConfig; 25 26 import org.jspecify.annotations.NonNull; 27 28 import java.util.ArrayList; 29 import java.util.HashMap; 30 import java.util.List; 31 import java.util.Map; 32 33 /** 34 * A builder for building {@link androidx.camera.core.impl.RequestProcessor.Request}. 35 */ 36 class RequestBuilder { 37 private List<Integer> mTargetOutputConfigIds = new ArrayList<>(); 38 private Map<CaptureRequest.Key<?>, Object> mParameters = new HashMap<>(); 39 private int mTemplateId = CameraDevice.TEMPLATE_PREVIEW; 40 int mCaptureStageId; 41 RequestBuilder()42 RequestBuilder() { 43 } 44 addTargetOutputConfigIds(int targetOutputConfigId)45 @NonNull RequestBuilder addTargetOutputConfigIds(int targetOutputConfigId) { 46 mTargetOutputConfigIds.add(targetOutputConfigId); 47 return this; 48 } 49 setParameters(CaptureRequest.@onNull Key<?> key, @NonNull Object value)50 @NonNull RequestBuilder setParameters(CaptureRequest.@NonNull Key<?> key, 51 @NonNull Object value) { 52 mParameters.put(key, value); 53 return this; 54 } 55 setTemplateId(int templateId)56 @NonNull RequestBuilder setTemplateId(int templateId) { 57 mTemplateId = templateId; 58 return this; 59 } 60 setCaptureStageId(int captureStageId)61 public @NonNull RequestBuilder setCaptureStageId(int captureStageId) { 62 mCaptureStageId = captureStageId; 63 return this; 64 } 65 build()66 RequestProcessor.@NonNull Request build() { 67 return new RequestProcessorRequest( 68 mTargetOutputConfigIds, mParameters, mTemplateId, mCaptureStageId); 69 } 70 71 static class RequestProcessorRequest implements RequestProcessor.Request { 72 final List<Integer> mTargetOutputConfigIds; 73 final Config mParameterConfig; 74 final int mTemplateId; 75 final int mCaptureStageId; 76 RequestProcessorRequest(List<Integer> targetOutputConfigIds, Map<CaptureRequest.Key<?>, Object> parameters, int templateId, int captureStageId)77 RequestProcessorRequest(List<Integer> targetOutputConfigIds, 78 Map<CaptureRequest.Key<?>, Object> parameters, 79 int templateId, 80 int captureStageId) { 81 mTargetOutputConfigIds = targetOutputConfigIds; 82 mTemplateId = templateId; 83 mCaptureStageId = captureStageId; 84 85 RequestOptionConfig.Builder requestOptionBuilder = new RequestOptionConfig.Builder(); 86 for (CaptureRequest.Key<?> key : parameters.keySet()) { 87 @SuppressWarnings("unchecked") 88 CaptureRequest.Key<Object> objKey = (CaptureRequest.Key<Object>) key; 89 requestOptionBuilder.setCaptureRequestOption(objKey, 90 parameters.get(objKey)); 91 } 92 mParameterConfig = requestOptionBuilder.build(); 93 } 94 95 @Override getTargetOutputConfigIds()96 public @NonNull List<Integer> getTargetOutputConfigIds() { 97 return mTargetOutputConfigIds; 98 } 99 100 @Override getParameters()101 public @NonNull Config getParameters() { 102 return mParameterConfig; 103 } 104 105 @Override getTemplateId()106 public int getTemplateId() { 107 return mTemplateId; 108 } 109 getCaptureStageId()110 public int getCaptureStageId() { 111 return mCaptureStageId; 112 } 113 } 114 } 115