1b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh/* 2b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh** 3b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh** Copyright 2015, The Android Open Source Project 4b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh** 5b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh** Licensed under the Apache License, Version 2.0 (the "License"); 6b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh** you may not use this file except in compliance with the License. 7b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh** You may obtain a copy of the License at 8b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh** 9b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh** http://www.apache.org/licenses/LICENSE-2.0 10b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh** 11b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh** Unless required by applicable law or agreed to in writing, software 12b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh** distributed under the License is distributed on an "AS IS" BASIS, 13b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh** See the License for the specific language governing permissions and 15b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh** limitations under the License. 16b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh*/ 17b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 18b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh#define LOG_TAG "OutputConfiguration" 19d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala//#define LOG_NDEBUG 0 20d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 21b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh#include <utils/Log.h> 22b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 23b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh#include <camera/camera2/OutputConfiguration.h> 24d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala#include <gui/Surface.h> 25b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh#include <binder/Parcel.h> 26b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 27b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yehnamespace android { 28b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 29b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 30b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yehconst int OutputConfiguration::INVALID_ROTATION = -1; 31018107a82d80f186d3efca250e38e9c85436a4d9Zhijun Heconst int OutputConfiguration::INVALID_SET_ID = -1; 32b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 33b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yehsp<IGraphicBufferProducer> OutputConfiguration::getGraphicBufferProducer() const { 34b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh return mGbp; 35b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh} 36b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 37b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yehint OutputConfiguration::getRotation() const { 38b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh return mRotation; 39b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh} 40b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 41018107a82d80f186d3efca250e38e9c85436a4d9Zhijun Heint OutputConfiguration::getSurfaceSetID() const { 42018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He return mSurfaceSetID; 43018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He} 44018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He 45d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville TalvalaOutputConfiguration::OutputConfiguration() : 46d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala mRotation(INVALID_ROTATION), 47d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala mSurfaceSetID(INVALID_SET_ID) { 48d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} 49d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 50d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville TalvalaOutputConfiguration::OutputConfiguration(const Parcel& parcel) : 51d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala mRotation(INVALID_ROTATION), 52d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala mSurfaceSetID(INVALID_SET_ID) { 53d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala readFromParcel(&parcel); 54d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} 55d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 56d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalastatus_t OutputConfiguration::readFromParcel(const Parcel* parcel) { 57d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala status_t err = OK; 58b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh int rotation = 0; 59d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 60d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala if (parcel == nullptr) return BAD_VALUE; 61d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 62d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala if ((err = parcel->readInt32(&rotation)) != OK) { 63b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh ALOGE("%s: Failed to read rotation from parcel", __FUNCTION__); 64d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala return err; 65b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh } 66b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 67018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He int setID = INVALID_SET_ID; 68d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala if ((err = parcel->readInt32(&setID)) != OK) { 69018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He ALOGE("%s: Failed to read surface set ID from parcel", __FUNCTION__); 70d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala return err; 71018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He } 72018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He 73d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala view::Surface surfaceShim; 74d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala if ((err = surfaceShim.readFromParcel(parcel)) != OK) { 75d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala ALOGE("%s: Failed to read surface from parcel", __FUNCTION__); 76d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala return err; 77d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala } 78d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 79d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala mGbp = surfaceShim.graphicBufferProducer; 80b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh mRotation = rotation; 81018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He mSurfaceSetID = setID; 82b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 8302bf03287652923b5bb5316667b065423565d6b4Eino-Ville Talvala ALOGV("%s: OutputConfiguration: bp = %p, name = %s, rotation = %d, setId = %d", __FUNCTION__, 8402bf03287652923b5bb5316667b065423565d6b4Eino-Ville Talvala mGbp.get(), String8(surfaceShim.name).string(), mRotation, mSurfaceSetID); 85d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 86d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala return err; 87b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh} 88b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 89018107a82d80f186d3efca250e38e9c85436a4d9Zhijun HeOutputConfiguration::OutputConfiguration(sp<IGraphicBufferProducer>& gbp, int rotation, 90018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He int surfaceSetID) { 913450ba7879be6522ea46a56c5e66e5382f5dd5baRuben Brunk mGbp = gbp; 923450ba7879be6522ea46a56c5e66e5382f5dd5baRuben Brunk mRotation = rotation; 93018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He mSurfaceSetID = surfaceSetID; 943450ba7879be6522ea46a56c5e66e5382f5dd5baRuben Brunk} 953450ba7879be6522ea46a56c5e66e5382f5dd5baRuben Brunk 96d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalastatus_t OutputConfiguration::writeToParcel(Parcel* parcel) const { 97d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 98d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala if (parcel == nullptr) return BAD_VALUE; 99d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala status_t err = OK; 100b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 101d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala err = parcel->writeInt32(mRotation); 102d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala if (err != OK) return err; 103d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 104d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala err = parcel->writeInt32(mSurfaceSetID); 105d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala if (err != OK) return err; 106d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 107d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala view::Surface surfaceShim; 108d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala surfaceShim.name = String16("unknown_name"); // name of surface 109d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala surfaceShim.graphicBufferProducer = mGbp; 110d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 111d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala err = surfaceShim.writeToParcel(parcel); 112d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala if (err != OK) return err; 113b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 114b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh return OK; 115b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh} 116b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 117b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh}; // namespace android 118