1 /*
2  * Copyright (C) 2014 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 com.android.camera.one.v2.initialization;
18 
19 import android.hardware.camera2.CaptureResult;
20 
21 import com.android.camera.async.Updatable;
22 import com.android.camera.one.OneCamera;
23 import com.android.camera.one.v2.camera2proxy.TotalCaptureResultProxy;
24 
25 import java.util.HashSet;
26 import java.util.Set;
27 
28 import javax.annotation.Nonnull;
29 
30 /**
31  * Distributes metadata to more-specific callbacks.
32  */
33 public class MetadataCallback implements Updatable<TotalCaptureResultProxy> {
34     private final Updatable<Integer> mFocusState;
35     private final Updatable<OneCamera.FocusState> mOneCameraFocusState;
36     private final Updatable<Integer> mFocusMode;
37 
MetadataCallback( Updatable<Integer> focusState, Updatable<OneCamera.FocusState> oneCameraFocusState, Updatable<Integer> focusMode)38     public MetadataCallback(
39             Updatable<Integer> focusState,
40             Updatable<OneCamera.FocusState> oneCameraFocusState,
41             Updatable<Integer> focusMode) {
42         mFocusState = focusState;
43         mOneCameraFocusState = oneCameraFocusState;
44         mFocusMode = focusMode;
45     }
46 
47     @Override
update(@onnull TotalCaptureResultProxy totalCaptureResult)48     public void update(@Nonnull TotalCaptureResultProxy totalCaptureResult) {
49         updateFocusMode(totalCaptureResult);
50         updateFocusState(totalCaptureResult);
51         updateOneCameraFocusState(totalCaptureResult);
52     }
53 
updateFocusMode(TotalCaptureResultProxy totalCaptureResult)54     private void updateFocusMode(TotalCaptureResultProxy totalCaptureResult) {
55         Integer focusMode = totalCaptureResult.get(CaptureResult.CONTROL_AF_MODE);
56         if (focusMode != null) {
57             mFocusMode.update(focusMode);
58         }
59     }
60 
updateFocusState(TotalCaptureResultProxy totalCaptureResult)61     private void updateFocusState(TotalCaptureResultProxy totalCaptureResult) {
62         Integer focusState = totalCaptureResult.get(CaptureResult.CONTROL_AF_STATE);
63         if (focusState != null) {
64             mFocusState.update(focusState);
65         }
66     }
67 
updateOneCameraFocusState(TotalCaptureResultProxy totalCaptureResult)68     private void updateOneCameraFocusState(TotalCaptureResultProxy totalCaptureResult) {
69         Float focusDistance = totalCaptureResult.get(CaptureResult.LENS_FOCUS_DISTANCE);
70         Integer focusState = totalCaptureResult.get(CaptureResult.CONTROL_AF_STATE);
71         if (focusDistance != null && focusState != null) {
72             Set<Integer> activeStates = new HashSet<>();
73             activeStates.add(CaptureResult.CONTROL_AF_STATE_ACTIVE_SCAN);
74             activeStates.add(CaptureResult.CONTROL_AF_STATE_PASSIVE_SCAN);
75             boolean active = activeStates.contains(focusState);
76             mOneCameraFocusState.update(new OneCamera.FocusState(focusDistance, active));
77         }
78     }
79 }
80