12dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley/* 22dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley * Copyright (C) 2014 The Android Open Source Project 32dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley * 42dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley * Licensed under the Apache License, Version 2.0 (the "License"); 52dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley * you may not use this file except in compliance with the License. 62dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley * You may obtain a copy of the License at 72dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley * 82dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley * http://www.apache.org/licenses/LICENSE-2.0 92dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley * 102dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley * Unless required by applicable law or agreed to in writing, software 112dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley * distributed under the License is distributed on an "AS IS" BASIS, 122dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley * See the License for the specific language governing permissions and 142dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley * limitations under the License. 152dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley */ 162dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 172dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley#define LOG_TAG "Camera-CaptureResult" 182dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley#include <utils/Log.h> 192dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 202dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley#include <camera/CaptureResult.h> 212dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley#include <binder/Parcel.h> 222dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 232dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalleynamespace android { 242dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 252dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalleybool CaptureResultExtras::isValid() { 262dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley return requestId >= 0; 272dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley} 282dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 292dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalleystatus_t CaptureResultExtras::readFromParcel(const android::Parcel *parcel) { 302dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley if (parcel == NULL) { 312dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGE("%s: Null parcel", __FUNCTION__); 322dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley return BAD_VALUE; 332dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley } 342dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 352dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley parcel->readInt32(&requestId); 362dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley parcel->readInt32(&burstId); 372dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley parcel->readInt32(&afTriggerId); 382dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley parcel->readInt32(&precaptureTriggerId); 392dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley parcel->readInt64(&frameNumber); 402dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley parcel->readInt32(&partialResultCount); 412dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley parcel->readInt32(&errorStreamId); 422dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 432dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley return OK; 442dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley} 452dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 462dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalleystatus_t CaptureResultExtras::writeToParcel(android::Parcel *parcel) const { 472dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley if (parcel == NULL) { 482dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGE("%s: Null parcel", __FUNCTION__); 492dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley return BAD_VALUE; 502dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley } 512dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 522dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley parcel->writeInt32(requestId); 532dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley parcel->writeInt32(burstId); 542dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley parcel->writeInt32(afTriggerId); 552dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley parcel->writeInt32(precaptureTriggerId); 562dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley parcel->writeInt64(frameNumber); 572dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley parcel->writeInt32(partialResultCount); 582dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley parcel->writeInt32(errorStreamId); 592dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 602dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley return OK; 612dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley} 622dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 632dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalleystatus_t PhysicalCaptureResultInfo::readFromParcel(const android::Parcel* parcel) { 642dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley status_t res; 652dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 662dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley mPhysicalCameraId.remove(mPhysicalCameraId.size()); 672dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley mPhysicalCameraMetadata.clear(); 682dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 692dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley if ((res = parcel->readString16(&mPhysicalCameraId)) != OK) { 702dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGE("%s: Failed to read camera id: %d", __FUNCTION__, res); 712dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley return res; 722dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley } 732dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 742dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley if ((res = mPhysicalCameraMetadata.readFromParcel(parcel)) != OK) { 752dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGE("%s: Failed to read metadata from parcel: %d", __FUNCTION__, res); 762dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley return res; 772dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley } 782dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley return OK; 792dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley} 802dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 812dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalleystatus_t PhysicalCaptureResultInfo::writeToParcel(android::Parcel* parcel) const { 822dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley status_t res; 832dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley if ((res = parcel->writeString16(mPhysicalCameraId)) != OK) { 842dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGE("%s: Failed to write physical camera ID to parcel: %d", 852dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley __FUNCTION__, res); 862dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley return res; 872dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley } 882dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley if ((res = mPhysicalCameraMetadata.writeToParcel(parcel)) != OK) { 892dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGE("%s: Failed to write physical camera metadata to parcel: %d", 902dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley __FUNCTION__, res); 912dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley return res; 922dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley } 932dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley return OK; 942dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley} 952dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 962dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen SmalleyCaptureResult::CaptureResult() : 972dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley mMetadata(), mResultExtras() { 982dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley} 992dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 1002dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen SmalleyCaptureResult::CaptureResult(const CaptureResult &otherResult) { 1012dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley mResultExtras = otherResult.mResultExtras; 1022dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley mMetadata = otherResult.mMetadata; 1032dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley mPhysicalMetadatas = otherResult.mPhysicalMetadatas; 1042dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley} 1052dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 1062dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalleystatus_t CaptureResult::readFromParcel(android::Parcel *parcel) { 1072dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 1082dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGV("%s: parcel = %p", __FUNCTION__, parcel); 1092dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 1102dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley if (parcel == NULL) { 1112dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGE("%s: parcel is null", __FUNCTION__); 1122dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley return BAD_VALUE; 1132dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley } 1142dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 1152dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley mMetadata.clear(); 1162dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley mPhysicalMetadatas.clear(); 1172dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 1182dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley status_t res = OK; 1192dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley res = mMetadata.readFromParcel(parcel); 1202dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley if (res != OK) { 1212dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGE("%s: Failed to read metadata from parcel.", 1222dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley __FUNCTION__); 1232dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley return res; 1242dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley } 1252dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGV("%s: Read metadata from parcel", __FUNCTION__); 1262dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 1272dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley int32_t physicalMetadataCount; 1282dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley if ((res = parcel->readInt32(&physicalMetadataCount)) != OK) { 1292dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGE("%s: Failed to read the physical metadata count from parcel: %d", __FUNCTION__, res); 1302dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley return res; 1312dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley } 1322dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley if (physicalMetadataCount < 0) { 1332dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGE("%s: Invalid physical metadata count from parcel: %d", 1342dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley __FUNCTION__, physicalMetadataCount); 1352dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley return BAD_VALUE; 1362dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley } 1372dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 1382dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley for (int32_t i = 0; i < physicalMetadataCount; i++) { 1392dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley String16 cameraId; 1402dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley if ((res = parcel->readString16(&cameraId)) != OK) { 1412dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGE("%s: Failed to read camera id: %d", __FUNCTION__, res); 1422dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley return res; 1432dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley } 1442dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 1452dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley CameraMetadata physicalMetadata; 1462dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley if ((res = physicalMetadata.readFromParcel(parcel)) != OK) { 1472dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGE("%s: Failed to read metadata from parcel: %d", __FUNCTION__, res); 1482dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley return res; 1492dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley } 1502dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 1512dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley mPhysicalMetadatas.emplace(mPhysicalMetadatas.end(), cameraId, physicalMetadata); 1522dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley } 1532dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGV("%s: Read physical metadata from parcel", __FUNCTION__); 1542dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 1552dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley res = mResultExtras.readFromParcel(parcel); 1562dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley if (res != OK) { 1572dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGE("%s: Failed to read result extras from parcel.", 1582dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley __FUNCTION__); 1592dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley return res; 1602dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley } 1612dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGV("%s: Read result extras from parcel", __FUNCTION__); 1622dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 1632dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley return OK; 1642dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley} 1652dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 1662dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalleystatus_t CaptureResult::writeToParcel(android::Parcel *parcel) const { 1672dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 1682dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGV("%s: parcel = %p", __FUNCTION__, parcel); 1692dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 1702dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley if (parcel == NULL) { 1712dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGE("%s: parcel is null", __FUNCTION__); 1722dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley return BAD_VALUE; 1732dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley } 1742dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 1752dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley status_t res; 1762dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 1772dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley res = mMetadata.writeToParcel(parcel); 1782dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley if (res != OK) { 1792dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGE("%s: Failed to write metadata to parcel", __FUNCTION__); 1802dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley return res; 1812dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley } 1822dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGV("%s: Wrote metadata to parcel", __FUNCTION__); 1832dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 1842dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley int32_t physicalMetadataCount = static_cast<int32_t>(mPhysicalMetadatas.size()); 1852dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley res = parcel->writeInt32(physicalMetadataCount); 1862dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley if (res != OK) { 1872dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGE("%s: Failed to write physical metadata count to parcel: %d", 1882dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley __FUNCTION__, res); 1892dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley return BAD_VALUE; 1902dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley } 1912dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley for (const auto& physicalMetadata : mPhysicalMetadatas) { 1922dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley if ((res = parcel->writeString16(physicalMetadata.mPhysicalCameraId)) != OK) { 1932dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGE("%s: Failed to write physical camera ID to parcel: %d", 1942dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley __FUNCTION__, res); 1952dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley return res; 1962dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley } 1972dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley if ((res = physicalMetadata.mPhysicalCameraMetadata.writeToParcel(parcel)) != OK) { 1982dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGE("%s: Failed to write physical camera metadata to parcel: %d", 1992dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley __FUNCTION__, res); 2002dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley return res; 2012dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley } 2022dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley } 2032dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGV("%s: Wrote physical camera metadata to parcel", __FUNCTION__); 2042dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 2052dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley res = mResultExtras.writeToParcel(parcel); 2062dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley if (res != OK) { 2072dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGE("%s: Failed to write result extras to parcel", __FUNCTION__); 2082dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley return res; 2092dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley } 2102dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley ALOGV("%s: Wrote result extras to parcel", __FUNCTION__); 2112dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 2122dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley return OK; 2132dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley} 2142dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley 2152dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley} 2162dd4e51d5c2a2dfc0bfdee9303269f5a665f6e3Stephen Smalley