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