xref: /aosp_15_r20/frameworks/av/camera/camera2/ConcurrentCamera.cpp (revision ec779b8e0859a360c3d303172224686826e6e0e1)
1*ec779b8eSAndroid Build Coastguard Worker /*
2*ec779b8eSAndroid Build Coastguard Worker  * Copyright (C) 2020 The Android Open Source Project
3*ec779b8eSAndroid Build Coastguard Worker  *
4*ec779b8eSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*ec779b8eSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*ec779b8eSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*ec779b8eSAndroid Build Coastguard Worker  *
8*ec779b8eSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*ec779b8eSAndroid Build Coastguard Worker  *
10*ec779b8eSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*ec779b8eSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*ec779b8eSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*ec779b8eSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*ec779b8eSAndroid Build Coastguard Worker  * limitations under the License.
15*ec779b8eSAndroid Build Coastguard Worker  */
16*ec779b8eSAndroid Build Coastguard Worker 
17*ec779b8eSAndroid Build Coastguard Worker // #define LOG_NDEBUG 0
18*ec779b8eSAndroid Build Coastguard Worker #define LOG_TAG "ConcurrentCamera"
19*ec779b8eSAndroid Build Coastguard Worker #include <utils/Log.h>
20*ec779b8eSAndroid Build Coastguard Worker #include <utils/String16.h>
21*ec779b8eSAndroid Build Coastguard Worker 
22*ec779b8eSAndroid Build Coastguard Worker #include <camera/camera2/ConcurrentCamera.h>
23*ec779b8eSAndroid Build Coastguard Worker #include <camera/StringUtils.h>
24*ec779b8eSAndroid Build Coastguard Worker 
25*ec779b8eSAndroid Build Coastguard Worker #include <binder/Parcel.h>
26*ec779b8eSAndroid Build Coastguard Worker 
27*ec779b8eSAndroid Build Coastguard Worker namespace android {
28*ec779b8eSAndroid Build Coastguard Worker namespace hardware {
29*ec779b8eSAndroid Build Coastguard Worker namespace camera2 {
30*ec779b8eSAndroid Build Coastguard Worker namespace utils {
31*ec779b8eSAndroid Build Coastguard Worker 
32*ec779b8eSAndroid Build Coastguard Worker ConcurrentCameraIdCombination::ConcurrentCameraIdCombination() = default;
33*ec779b8eSAndroid Build Coastguard Worker 
ConcurrentCameraIdCombination(std::vector<std::pair<std::string,int32_t>> && combination)34*ec779b8eSAndroid Build Coastguard Worker ConcurrentCameraIdCombination::ConcurrentCameraIdCombination(
35*ec779b8eSAndroid Build Coastguard Worker         std::vector<std::pair<std::string, int32_t>> &&combination)
36*ec779b8eSAndroid Build Coastguard Worker             : mConcurrentCameraIdDeviceIdPairs(std::move(combination)) { }
37*ec779b8eSAndroid Build Coastguard Worker 
38*ec779b8eSAndroid Build Coastguard Worker ConcurrentCameraIdCombination::~ConcurrentCameraIdCombination() = default;
39*ec779b8eSAndroid Build Coastguard Worker 
readFromParcel(const android::Parcel * parcel)40*ec779b8eSAndroid Build Coastguard Worker status_t ConcurrentCameraIdCombination::readFromParcel(const android::Parcel* parcel) {
41*ec779b8eSAndroid Build Coastguard Worker     if (parcel == nullptr) {
42*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Null parcel", __FUNCTION__);
43*ec779b8eSAndroid Build Coastguard Worker         return BAD_VALUE;
44*ec779b8eSAndroid Build Coastguard Worker     }
45*ec779b8eSAndroid Build Coastguard Worker     status_t err = OK;
46*ec779b8eSAndroid Build Coastguard Worker     mConcurrentCameraIdDeviceIdPairs.clear();
47*ec779b8eSAndroid Build Coastguard Worker     int32_t cameraCount = 0;
48*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt32(&cameraCount)) != OK) {
49*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read the camera count from parcel: %d", __FUNCTION__, err);
50*ec779b8eSAndroid Build Coastguard Worker         return err;
51*ec779b8eSAndroid Build Coastguard Worker     }
52*ec779b8eSAndroid Build Coastguard Worker     for (int32_t i = 0; i < cameraCount; i++) {
53*ec779b8eSAndroid Build Coastguard Worker         String16 cameraId;
54*ec779b8eSAndroid Build Coastguard Worker         if ((err = parcel->readString16(&cameraId)) != OK) {
55*ec779b8eSAndroid Build Coastguard Worker             ALOGE("%s: Failed to read camera id!", __FUNCTION__);
56*ec779b8eSAndroid Build Coastguard Worker             return err;
57*ec779b8eSAndroid Build Coastguard Worker         }
58*ec779b8eSAndroid Build Coastguard Worker         int32_t deviceId;
59*ec779b8eSAndroid Build Coastguard Worker         if ((err = parcel->readInt32(&deviceId)) != OK) {
60*ec779b8eSAndroid Build Coastguard Worker             ALOGE("%s: Failed to read device id!", __FUNCTION__);
61*ec779b8eSAndroid Build Coastguard Worker             return err;
62*ec779b8eSAndroid Build Coastguard Worker         }
63*ec779b8eSAndroid Build Coastguard Worker         mConcurrentCameraIdDeviceIdPairs.push_back({toStdString(cameraId), deviceId});
64*ec779b8eSAndroid Build Coastguard Worker     }
65*ec779b8eSAndroid Build Coastguard Worker     return OK;
66*ec779b8eSAndroid Build Coastguard Worker }
67*ec779b8eSAndroid Build Coastguard Worker 
writeToParcel(android::Parcel * parcel) const68*ec779b8eSAndroid Build Coastguard Worker status_t ConcurrentCameraIdCombination::writeToParcel(android::Parcel* parcel) const {
69*ec779b8eSAndroid Build Coastguard Worker     if (parcel == nullptr) {
70*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Null parcel", __FUNCTION__);
71*ec779b8eSAndroid Build Coastguard Worker         return BAD_VALUE;
72*ec779b8eSAndroid Build Coastguard Worker     }
73*ec779b8eSAndroid Build Coastguard Worker 
74*ec779b8eSAndroid Build Coastguard Worker     status_t err = OK;
75*ec779b8eSAndroid Build Coastguard Worker 
76*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt32(mConcurrentCameraIdDeviceIdPairs.size())) != OK) {
77*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write the camera id count to parcel: %d", __FUNCTION__, err);
78*ec779b8eSAndroid Build Coastguard Worker         return err;
79*ec779b8eSAndroid Build Coastguard Worker     }
80*ec779b8eSAndroid Build Coastguard Worker 
81*ec779b8eSAndroid Build Coastguard Worker     for (const auto &it : mConcurrentCameraIdDeviceIdPairs) {
82*ec779b8eSAndroid Build Coastguard Worker         if ((err = parcel->writeString16(toString16(it.first))) != OK) {
83*ec779b8eSAndroid Build Coastguard Worker             ALOGE("%s: Failed to write the camera id string to parcel: %d", __FUNCTION__, err);
84*ec779b8eSAndroid Build Coastguard Worker             return err;
85*ec779b8eSAndroid Build Coastguard Worker         }
86*ec779b8eSAndroid Build Coastguard Worker         if ((err = parcel->writeInt32(it.second)) != OK) {
87*ec779b8eSAndroid Build Coastguard Worker             ALOGE("%s: Failed to write the device id integer to parcel: %d", __FUNCTION__, err);
88*ec779b8eSAndroid Build Coastguard Worker             return err;
89*ec779b8eSAndroid Build Coastguard Worker         }
90*ec779b8eSAndroid Build Coastguard Worker     }
91*ec779b8eSAndroid Build Coastguard Worker     return OK;
92*ec779b8eSAndroid Build Coastguard Worker }
93*ec779b8eSAndroid Build Coastguard Worker 
94*ec779b8eSAndroid Build Coastguard Worker CameraIdAndSessionConfiguration::CameraIdAndSessionConfiguration() = default;
95*ec779b8eSAndroid Build Coastguard Worker CameraIdAndSessionConfiguration::~CameraIdAndSessionConfiguration() = default;
96*ec779b8eSAndroid Build Coastguard Worker 
readFromParcel(const android::Parcel * parcel)97*ec779b8eSAndroid Build Coastguard Worker status_t CameraIdAndSessionConfiguration::readFromParcel(const android::Parcel* parcel) {
98*ec779b8eSAndroid Build Coastguard Worker     if (parcel == nullptr) {
99*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Null parcel", __FUNCTION__);
100*ec779b8eSAndroid Build Coastguard Worker         return BAD_VALUE;
101*ec779b8eSAndroid Build Coastguard Worker     }
102*ec779b8eSAndroid Build Coastguard Worker     status_t err = OK;
103*ec779b8eSAndroid Build Coastguard Worker     String16 id;
104*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readString16(&id)) != OK) {
105*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read camera id!", __FUNCTION__);
106*ec779b8eSAndroid Build Coastguard Worker         return err;
107*ec779b8eSAndroid Build Coastguard Worker     }
108*ec779b8eSAndroid Build Coastguard Worker     if ((err = mSessionConfiguration.readFromParcel(parcel)) != OK) {
109*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read sessionConfiguration!", __FUNCTION__);
110*ec779b8eSAndroid Build Coastguard Worker         return err;
111*ec779b8eSAndroid Build Coastguard Worker     }
112*ec779b8eSAndroid Build Coastguard Worker     mCameraId = toStdString(id);
113*ec779b8eSAndroid Build Coastguard Worker     return OK;
114*ec779b8eSAndroid Build Coastguard Worker }
115*ec779b8eSAndroid Build Coastguard Worker 
writeToParcel(android::Parcel * parcel) const116*ec779b8eSAndroid Build Coastguard Worker status_t CameraIdAndSessionConfiguration::writeToParcel(android::Parcel* parcel) const {
117*ec779b8eSAndroid Build Coastguard Worker     if (parcel == nullptr) {
118*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Null parcel", __FUNCTION__);
119*ec779b8eSAndroid Build Coastguard Worker         return BAD_VALUE;
120*ec779b8eSAndroid Build Coastguard Worker     }
121*ec779b8eSAndroid Build Coastguard Worker 
122*ec779b8eSAndroid Build Coastguard Worker     status_t err = OK;
123*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeString16(toString16(mCameraId))) != OK) {
124*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write camera id!", __FUNCTION__);
125*ec779b8eSAndroid Build Coastguard Worker         return err;
126*ec779b8eSAndroid Build Coastguard Worker     }
127*ec779b8eSAndroid Build Coastguard Worker 
128*ec779b8eSAndroid Build Coastguard Worker     if ((err = mSessionConfiguration.writeToParcel(parcel) != OK)) {
129*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write session configuration!", __FUNCTION__);
130*ec779b8eSAndroid Build Coastguard Worker         return err;
131*ec779b8eSAndroid Build Coastguard Worker     }
132*ec779b8eSAndroid Build Coastguard Worker     return OK;
133*ec779b8eSAndroid Build Coastguard Worker }
134*ec779b8eSAndroid Build Coastguard Worker 
135*ec779b8eSAndroid Build Coastguard Worker } // namespace utils
136*ec779b8eSAndroid Build Coastguard Worker } // namespace camera2
137*ec779b8eSAndroid Build Coastguard Worker } // namespace hardware
138*ec779b8eSAndroid Build Coastguard Worker } // namespace android
139