1e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin/* 2e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** 3e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** Copyright 2013, The Android Open Source Project 4e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** 5e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** Licensed under the Apache License, Version 2.0 (the "License"); 6e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** you may not use this file except in compliance with the License. 7e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** You may obtain a copy of the License at 8e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** 9e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** http://www.apache.org/licenses/LICENSE-2.0 10e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** 11e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** Unless required by applicable law or agreed to in writing, software 12e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** distributed under the License is distributed on an "AS IS" BASIS, 13e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** See the License for the specific language governing permissions and 15e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** limitations under the License. 16e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin*/ 17e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 18e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin// #define LOG_NDEBUG 0 19e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#define LOG_TAG "CameraRequest" 20e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#include <utils/Log.h> 21aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev#include <utils/String16.h> 22e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 237b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala#include <camera/camera2/CaptureRequest.h> 24e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 25e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#include <binder/Parcel.h> 26e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#include <gui/Surface.h> 27032845cc878f538e3336c96e1c24668953eab971Mathias Agopian#include <gui/view/Surface.h> 28e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 29e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkinnamespace android { 30d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalanamespace hardware { 31d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalanamespace camera2 { 32e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 33032845cc878f538e3336c96e1c24668953eab971Mathias Agopian// These must be in the .cpp (to avoid inlining) 34032845cc878f538e3336c96e1c24668953eab971Mathias AgopianCaptureRequest::CaptureRequest() = default; 35032845cc878f538e3336c96e1c24668953eab971Mathias AgopianCaptureRequest::~CaptureRequest() = default; 36032845cc878f538e3336c96e1c24668953eab971Mathias AgopianCaptureRequest::CaptureRequest(const CaptureRequest& rhs) = default; 37032845cc878f538e3336c96e1c24668953eab971Mathias AgopianCaptureRequest::CaptureRequest(CaptureRequest&& rhs) noexcept = default; 38032845cc878f538e3336c96e1c24668953eab971Mathias Agopian 39032845cc878f538e3336c96e1c24668953eab971Mathias Agopian 40f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvalastatus_t CaptureRequest::readFromParcel(const android::Parcel* parcel) { 41e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin if (parcel == NULL) { 42e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin ALOGE("%s: Null parcel", __FUNCTION__); 43e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin return BAD_VALUE; 44e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin } 45e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 46e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin mSurfaceList.clear(); 474dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh mStreamIdxList.clear(); 484dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh mSurfaceIdxList.clear(); 49aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev mPhysicalCameraSettings.clear(); 50e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 5148932bbf9f1e74282419a54c116afbb51a5db786Eino-Ville Talvala status_t err = OK; 52e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 53aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev int32_t settingsCount; 54aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev if ((err = parcel->readInt32(&settingsCount)) != OK) { 55aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev ALOGE("%s: Failed to read the settings count from parcel: %d", __FUNCTION__, err); 56e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin return err; 57e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin } 58aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev 59aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev if (settingsCount <= 0) { 60aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev ALOGE("%s: Settings count %d should always be positive!", __FUNCTION__, settingsCount); 61aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev return BAD_VALUE; 62aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev } 63aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev 64aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev for (int32_t i = 0; i < settingsCount; i++) { 65aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev String16 id; 66aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev if ((err = parcel->readString16(&id)) != OK) { 67aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev ALOGE("%s: Failed to read camera id!", __FUNCTION__); 68aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev return BAD_VALUE; 69aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev } 70aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev 71aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev CameraMetadata settings; 72aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev if ((err = settings.readFromParcel(parcel)) != OK) { 73aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev ALOGE("%s: Failed to read metadata from parcel", __FUNCTION__); 74aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev return err; 75aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev } 76aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev ALOGV("%s: Read metadata from parcel", __FUNCTION__); 77aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev mPhysicalCameraSettings.push_back({std::string(String8(id).string()), settings}); 78aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev } 79e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 804dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh int isReprocess = 0; 814dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh if ((err = parcel->readInt32(&isReprocess)) != OK) { 824dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh ALOGE("%s: Failed to read reprocessing from parcel", __FUNCTION__); 834dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh return err; 844dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh } 854dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh mIsReprocess = (isReprocess != 0); 864dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh 87e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin int32_t size; 88e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin if ((err = parcel->readInt32(&size)) != OK) { 89e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin ALOGE("%s: Failed to read surface list size from parcel", __FUNCTION__); 90e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin return err; 91e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin } 92e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin ALOGV("%s: Read surface list size = %d", __FUNCTION__, size); 93e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 94e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin // Do not distinguish null arrays from 0-sized arrays. 954dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh for (int32_t i = 0; i < size; ++i) { 96e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin // Parcel.writeParcelableArray 97e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin size_t len; 98e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin const char16_t* className = parcel->readString16Inplace(&len); 99e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin ALOGV("%s: Read surface class = %s", __FUNCTION__, 100e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin className != NULL ? String8(className).string() : "<null>"); 101e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 102e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin if (className == NULL) { 103e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin continue; 104e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin } 105e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 106e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin // Surface.writeToParcel 10748932bbf9f1e74282419a54c116afbb51a5db786Eino-Ville Talvala view::Surface surfaceShim; 10848932bbf9f1e74282419a54c116afbb51a5db786Eino-Ville Talvala if ((err = surfaceShim.readFromParcel(parcel)) != OK) { 10948932bbf9f1e74282419a54c116afbb51a5db786Eino-Ville Talvala ALOGE("%s: Failed to read output target Surface %d from parcel: %s (%d)", 11048932bbf9f1e74282419a54c116afbb51a5db786Eino-Ville Talvala __FUNCTION__, i, strerror(-err), err); 11148932bbf9f1e74282419a54c116afbb51a5db786Eino-Ville Talvala return err; 11248932bbf9f1e74282419a54c116afbb51a5db786Eino-Ville Talvala } 113e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 114e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin sp<Surface> surface; 11548932bbf9f1e74282419a54c116afbb51a5db786Eino-Ville Talvala if (surfaceShim.graphicBufferProducer != NULL) { 11648932bbf9f1e74282419a54c116afbb51a5db786Eino-Ville Talvala surface = new Surface(surfaceShim.graphicBufferProducer); 117e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin } 118e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 119e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin mSurfaceList.push_back(surface); 120e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin } 121e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 1224dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh int32_t streamSurfaceSize; 1234dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh if ((err = parcel->readInt32(&streamSurfaceSize)) != OK) { 1244dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh ALOGE("%s: Failed to read streamSurfaceSize from parcel", __FUNCTION__); 125618ff8a48a0c895a78f91f5692510c2a809425c3Chien-Yu Chen return err; 126618ff8a48a0c895a78f91f5692510c2a809425c3Chien-Yu Chen } 1274dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh 1284dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh if (streamSurfaceSize < 0) { 1294dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh ALOGE("%s: Bad streamSurfaceSize %d from parcel", __FUNCTION__, streamSurfaceSize); 1304dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh return BAD_VALUE; 1314dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh } 1324dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh 1334dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh for (int32_t i = 0; i < streamSurfaceSize; ++i) { 1344dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh int streamIdx; 1354dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh if ((err = parcel->readInt32(&streamIdx)) != OK) { 1364dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh ALOGE("%s: Failed to read stream index from parcel", __FUNCTION__); 1374dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh return err; 1384dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh } 1394dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh mStreamIdxList.push_back(streamIdx); 1404dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh 1414dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh int surfaceIdx; 1424dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh if ((err = parcel->readInt32(&surfaceIdx)) != OK) { 1434dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh ALOGE("%s: Failed to read surface index from parcel", __FUNCTION__); 1444dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh return err; 1454dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh } 1464dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh mSurfaceIdxList.push_back(surfaceIdx); 1474dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh } 148618ff8a48a0c895a78f91f5692510c2a809425c3Chien-Yu Chen 149e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin return OK; 150e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin} 151e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 152f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvalastatus_t CaptureRequest::writeToParcel(android::Parcel* parcel) const { 153e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin if (parcel == NULL) { 154e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin ALOGE("%s: Null parcel", __FUNCTION__); 155e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin return BAD_VALUE; 156e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin } 157e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 15848932bbf9f1e74282419a54c116afbb51a5db786Eino-Ville Talvala status_t err = OK; 159e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 160aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev int32_t settingsCount = static_cast<int32_t>(mPhysicalCameraSettings.size()); 161aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev 162aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev if ((err = parcel->writeInt32(settingsCount)) != OK) { 163aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev ALOGE("%s: Failed to write settings count!", __FUNCTION__); 164e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin return err; 165e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin } 166e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 167aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev for (const auto &it : mPhysicalCameraSettings) { 168aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev if ((err = parcel->writeString16(String16(it.id.c_str()))) != OK) { 169aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev ALOGE("%s: Failed to camera id!", __FUNCTION__); 170aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev return err; 171aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev } 172aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev 173aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev if ((err = it.settings.writeToParcel(parcel)) != OK) { 174aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev ALOGE("%s: Failed to write settings!", __FUNCTION__); 175aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev return err; 176aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev } 177aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev } 178aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev 1794dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh parcel->writeInt32(mIsReprocess ? 1 : 0); 180e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 1814dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh if (mSurfaceConverted) { 1824dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh parcel->writeInt32(0); // 0-sized array 1834dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh } else { 1844dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh int32_t size = static_cast<int32_t>(mSurfaceList.size()); 1854dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh 1864dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh // Send 0-sized arrays when it's empty. Do not send null arrays. 1874dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh parcel->writeInt32(size); 1884dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh 1894dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh for (int32_t i = 0; i < size; ++i) { 1904dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh // not sure if readParcelableArray does this, hard to tell from source 1914dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh parcel->writeString16(String16("android.view.Surface")); 1924dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh 1934dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh // Surface.writeToParcel 1944dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh view::Surface surfaceShim; 1954dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh surfaceShim.name = String16("unknown_name"); 1964dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh surfaceShim.graphicBufferProducer = mSurfaceList[i]->getIGraphicBufferProducer(); 1974dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh if ((err = surfaceShim.writeToParcel(parcel)) != OK) { 1984dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh ALOGE("%s: Failed to write output target Surface %d to parcel: %s (%d)", 1994dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh __FUNCTION__, i, strerror(-err), err); 2004dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh return err; 2014dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh } 2024dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh } 2034dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh } 204e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 2054dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh parcel->writeInt32(mStreamIdxList.size()); 2064dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh for (size_t i = 0; i < mStreamIdxList.size(); ++i) { 2074dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh if ((err = parcel->writeInt32(mStreamIdxList[i])) != OK) { 2084dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh ALOGE("%s: Failed to write stream index to parcel", __FUNCTION__); 2094dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh return err; 2104dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh } 2114dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh if ((err = parcel->writeInt32(mSurfaceIdxList[i])) != OK) { 2124dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh ALOGE("%s: Failed to write surface index to parcel", __FUNCTION__); 21348932bbf9f1e74282419a54c116afbb51a5db786Eino-Ville Talvala return err; 21448932bbf9f1e74282419a54c116afbb51a5db786Eino-Ville Talvala } 215e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin } 216e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin return OK; 217e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin} 218e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 219d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} // namespace camera2 220d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} // namespace hardware 221d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} // namespace android 222