• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 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 android.hardware.camera2.extension;
18 
19 import android.annotation.FlaggedApi;
20 import android.annotation.NonNull;
21 import android.annotation.Nullable;
22 import android.annotation.SystemApi;
23 import android.hardware.camera2.params.DynamicRangeProfiles;
24 
25 import com.android.internal.camera.flags.Flags;
26 
27 import java.util.ArrayList;
28 import java.util.List;
29 
30 /**
31  * Helper class used to describe a single camera
32  * output configuration that is intended to be configured
33  * internally by the extension implementation.
34  *
35  * @hide
36  */
37 @SystemApi
38 public class ExtensionOutputConfiguration {
39     private final List<CameraOutputSurface> mSurfaces;
40     private final String mPhysicalCameraId;
41     private final int mOutputConfigId;
42     private final int mSurfaceGroupId;
43 
44     /**
45      * Initialize an extension output configuration instance
46      *
47      * @param outputs           List of camera {@link CameraOutputSurface outputs}.
48      *                          The list may include more than one entry
49      *                          only in case of shared camera outputs.
50      *                          In all other cases the list will only include
51      *                          a single entry.
52      * @param outputConfigId    Unique output configuration id used to identify
53      *                          this particular configuration.
54      * @param physicalCameraId  In case of physical camera capture, this field
55      *                          must contain a valid physical camera id.
56      * @param surfaceGroupId    In case of surface group, this field must
57      *                          contain the surface group id
58      */
ExtensionOutputConfiguration(@onNull List<CameraOutputSurface> outputs, int outputConfigId, @Nullable String physicalCameraId, int surfaceGroupId)59     public ExtensionOutputConfiguration(@NonNull List<CameraOutputSurface> outputs,
60             int outputConfigId, @Nullable String physicalCameraId, int surfaceGroupId) {
61         mSurfaces = outputs;
62         mPhysicalCameraId = physicalCameraId;
63         mOutputConfigId = outputConfigId;
64         mSurfaceGroupId = surfaceGroupId;
65     }
66 
initializeOutputConfig(@onNull CameraOutputConfig config, @NonNull CameraOutputSurface surface)67     private void initializeOutputConfig(@NonNull CameraOutputConfig config,
68             @NonNull CameraOutputSurface surface) {
69         config.surface = surface.getSurface();
70         if (surface.getSize() != null) {
71             config.size = new Size();
72             config.size.width = surface.getSize().getWidth();
73             config.size.height = surface.getSize().getHeight();
74         }
75         config.imageFormat = surface.getImageFormat();
76         config.type = CameraOutputConfig.TYPE_SURFACE;
77         config.physicalCameraId = mPhysicalCameraId;
78         config.outputId = new OutputConfigId();
79         config.outputId.id = mOutputConfigId;
80         config.surfaceGroupId = mSurfaceGroupId;
81         config.dynamicRangeProfile = surface.getDynamicRangeProfile();
82     }
83 
getOutputConfig()84     @Nullable CameraOutputConfig getOutputConfig() {
85         if (mSurfaces.isEmpty()) {
86             return null;
87         }
88 
89         CameraOutputConfig ret = new CameraOutputConfig();
90         initializeOutputConfig(ret, mSurfaces.get(0));
91         if (mSurfaces.size() > 1) {
92             ret.sharedSurfaceConfigs = new ArrayList<>(mSurfaces.size() - 1);
93             for (int i = 1; i < mSurfaces.size(); i++) {
94                 CameraOutputConfig sharedConfig = new CameraOutputConfig();
95                 initializeOutputConfig(sharedConfig, mSurfaces.get(i));
96                 ret.sharedSurfaceConfigs.add(sharedConfig);
97             }
98         }
99 
100         return ret;
101     }
102 }
103