CaptureResult.cpp revision d56db1d2bee182d1851097a9c712712fc094d117
1d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent/* 2d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent * Copyright (C) 2014 The Android Open Source Project 3d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent * 4d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent * Licensed under the Apache License, Version 2.0 (the "License"); 5d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent * you may not use this file except in compliance with the License. 6d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent * You may obtain a copy of the License at 7d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent * 8d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent * http://www.apache.org/licenses/LICENSE-2.0 9d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent * 10d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent * Unless required by applicable law or agreed to in writing, software 11d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent * distributed under the License is distributed on an "AS IS" BASIS, 12d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent * See the License for the specific language governing permissions and 14d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent * limitations under the License. 15d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent */ 16d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent 17d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent#define LOG_TAG "Camera-CaptureResult" 18d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent#include <utils/Log.h> 19d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent 20d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent#include <camera/CaptureResult.h> 21d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent#include <binder/Parcel.h> 22d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent 23d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurentnamespace android { 24d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent 25d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurentbool CaptureResultExtras::isValid() { 26d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent return requestId >= 0; 27d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent} 28d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent 29d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurentstatus_t CaptureResultExtras::readFromParcel(const Parcel *parcel) { 30d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent if (parcel == NULL) { 31d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent ALOGE("%s: Null parcel", __FUNCTION__); 32d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent return BAD_VALUE; 33d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent } 34d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent 35d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent parcel->readInt32(&requestId); 36d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent parcel->readInt32(&burstId); 37d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent parcel->readInt32(&afTriggerId); 38d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent parcel->readInt32(&precaptureTriggerId); 39d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent parcel->readInt64(&frameNumber); 40d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent parcel->readInt32(&partialResultCount); 41d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent 42d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent return OK; 43d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent} 44d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent 45d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurentstatus_t CaptureResultExtras::writeToParcel(Parcel *parcel) const { 46d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent if (parcel == NULL) { 47d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent ALOGE("%s: Null parcel", __FUNCTION__); 48d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent return BAD_VALUE; 49d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent } 50d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent 51d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent parcel->writeInt32(requestId); 52d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent parcel->writeInt32(burstId); 53d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent parcel->writeInt32(afTriggerId); 54d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent parcel->writeInt32(precaptureTriggerId); 55d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent parcel->writeInt64(frameNumber); 56d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent parcel->writeInt32(partialResultCount); 57d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent 58d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent return OK; 59d73697b9b61be2fa227b93b5c4c8e30badd32e71Eric Laurent} 60 61CaptureResult::CaptureResult() : 62 mMetadata(), mResultExtras() { 63} 64 65CaptureResult::CaptureResult(const CaptureResult &otherResult) { 66 mResultExtras = otherResult.mResultExtras; 67 mMetadata = otherResult.mMetadata; 68} 69 70status_t CaptureResult::readFromParcel(Parcel *parcel) { 71 72 ALOGV("%s: parcel = %p", __FUNCTION__, parcel); 73 74 if (parcel == NULL) { 75 ALOGE("%s: parcel is null", __FUNCTION__); 76 return BAD_VALUE; 77 } 78 79 mMetadata.clear(); 80 81 status_t res = OK; 82 res = mMetadata.readFromParcel(parcel); 83 if (res != OK) { 84 ALOGE("%s: Failed to read metadata from parcel.", 85 __FUNCTION__); 86 return res; 87 } 88 ALOGV("%s: Read metadata from parcel", __FUNCTION__); 89 90 res = mResultExtras.readFromParcel(parcel); 91 if (res != OK) { 92 ALOGE("%s: Failed to read result extras from parcel.", 93 __FUNCTION__); 94 return res; 95 } 96 ALOGV("%s: Read result extras from parcel", __FUNCTION__); 97 98 return OK; 99} 100 101status_t CaptureResult::writeToParcel(Parcel *parcel) const { 102 103 ALOGV("%s: parcel = %p", __FUNCTION__, parcel); 104 105 if (parcel == NULL) { 106 ALOGE("%s: parcel is null", __FUNCTION__); 107 return BAD_VALUE; 108 } 109 110 status_t res; 111 112 res = mMetadata.writeToParcel(parcel); 113 if (res != OK) { 114 ALOGE("%s: Failed to write metadata to parcel", __FUNCTION__); 115 return res; 116 } 117 ALOGV("%s: Wrote metadata to parcel", __FUNCTION__); 118 119 res = mResultExtras.writeToParcel(parcel); 120 if (res != OK) { 121 ALOGE("%s: Failed to write result extras to parcel", __FUNCTION__); 122 return res; 123 } 124 ALOGV("%s: Wrote result extras to parcel", __FUNCTION__); 125 126 return OK; 127} 128 129} 130