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