OutputConfiguration.cpp revision f51fca277eb5b86bd0b2e3fc90ecb2b63089de29
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 455d677d1f0879d5101e38df480a38228a64d63959Zhijun Heint OutputConfiguration::getSurfaceType() const { 465d677d1f0879d5101e38df480a38228a64d63959Zhijun He return mSurfaceType; 475d677d1f0879d5101e38df480a38228a64d63959Zhijun He} 485d677d1f0879d5101e38df480a38228a64d63959Zhijun He 495d677d1f0879d5101e38df480a38228a64d63959Zhijun Heint OutputConfiguration::getWidth() const { 505d677d1f0879d5101e38df480a38228a64d63959Zhijun He return mWidth; 515d677d1f0879d5101e38df480a38228a64d63959Zhijun He} 525d677d1f0879d5101e38df480a38228a64d63959Zhijun He 535d677d1f0879d5101e38df480a38228a64d63959Zhijun Heint OutputConfiguration::getHeight() const { 545d677d1f0879d5101e38df480a38228a64d63959Zhijun He return mHeight; 555d677d1f0879d5101e38df480a38228a64d63959Zhijun He} 565d677d1f0879d5101e38df480a38228a64d63959Zhijun He 57d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville TalvalaOutputConfiguration::OutputConfiguration() : 58d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala mRotation(INVALID_ROTATION), 595d677d1f0879d5101e38df480a38228a64d63959Zhijun He mSurfaceSetID(INVALID_SET_ID), 605d677d1f0879d5101e38df480a38228a64d63959Zhijun He mSurfaceType(SURFACE_TYPE_UNKNOWN), 615d677d1f0879d5101e38df480a38228a64d63959Zhijun He mWidth(0), 625d677d1f0879d5101e38df480a38228a64d63959Zhijun He mHeight(0) { 63d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} 64d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 65f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville TalvalaOutputConfiguration::OutputConfiguration(const android::Parcel& parcel) : 66d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala mRotation(INVALID_ROTATION), 67d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala mSurfaceSetID(INVALID_SET_ID) { 68d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala readFromParcel(&parcel); 69d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} 70d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 71f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvalastatus_t OutputConfiguration::readFromParcel(const android::Parcel* parcel) { 72d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala status_t err = OK; 73b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh int rotation = 0; 74d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 75d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala if (parcel == nullptr) return BAD_VALUE; 76d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 77d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala if ((err = parcel->readInt32(&rotation)) != OK) { 78b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh ALOGE("%s: Failed to read rotation from parcel", __FUNCTION__); 79d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala return err; 80b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh } 81b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 82018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He int setID = INVALID_SET_ID; 83d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala if ((err = parcel->readInt32(&setID)) != OK) { 84018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He ALOGE("%s: Failed to read surface set ID from parcel", __FUNCTION__); 85d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala return err; 86018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He } 87018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He 885d677d1f0879d5101e38df480a38228a64d63959Zhijun He int surfaceType = SURFACE_TYPE_UNKNOWN; 895d677d1f0879d5101e38df480a38228a64d63959Zhijun He if ((err = parcel->readInt32(&surfaceType)) != OK) { 905d677d1f0879d5101e38df480a38228a64d63959Zhijun He ALOGE("%s: Failed to read surface type from parcel", __FUNCTION__); 915d677d1f0879d5101e38df480a38228a64d63959Zhijun He return err; 925d677d1f0879d5101e38df480a38228a64d63959Zhijun He } 935d677d1f0879d5101e38df480a38228a64d63959Zhijun He 945d677d1f0879d5101e38df480a38228a64d63959Zhijun He int width = 0; 955d677d1f0879d5101e38df480a38228a64d63959Zhijun He if ((err = parcel->readInt32(&width)) != OK) { 965d677d1f0879d5101e38df480a38228a64d63959Zhijun He ALOGE("%s: Failed to read surface width from parcel", __FUNCTION__); 975d677d1f0879d5101e38df480a38228a64d63959Zhijun He return err; 985d677d1f0879d5101e38df480a38228a64d63959Zhijun He } 995d677d1f0879d5101e38df480a38228a64d63959Zhijun He 1005d677d1f0879d5101e38df480a38228a64d63959Zhijun He int height = 0; 1015d677d1f0879d5101e38df480a38228a64d63959Zhijun He if ((err = parcel->readInt32(&height)) != OK) { 1025d677d1f0879d5101e38df480a38228a64d63959Zhijun He ALOGE("%s: Failed to read surface height from parcel", __FUNCTION__); 1035d677d1f0879d5101e38df480a38228a64d63959Zhijun He return err; 1045d677d1f0879d5101e38df480a38228a64d63959Zhijun He } 1055d677d1f0879d5101e38df480a38228a64d63959Zhijun He 106d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala view::Surface surfaceShim; 107d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala if ((err = surfaceShim.readFromParcel(parcel)) != OK) { 1085d677d1f0879d5101e38df480a38228a64d63959Zhijun He // Read surface failure for deferred surface configuration is expected. 1095d677d1f0879d5101e38df480a38228a64d63959Zhijun He if (surfaceType == SURFACE_TYPE_SURFACE_VIEW || 1105d677d1f0879d5101e38df480a38228a64d63959Zhijun He surfaceType == SURFACE_TYPE_SURFACE_TEXTURE) { 1115d677d1f0879d5101e38df480a38228a64d63959Zhijun He ALOGV("%s: Get null surface from a deferred surface configuration (%dx%d)", 1125d677d1f0879d5101e38df480a38228a64d63959Zhijun He __FUNCTION__, width, height); 1135d677d1f0879d5101e38df480a38228a64d63959Zhijun He err = OK; 1145d677d1f0879d5101e38df480a38228a64d63959Zhijun He } else { 1155d677d1f0879d5101e38df480a38228a64d63959Zhijun He ALOGE("%s: Failed to read surface from parcel", __FUNCTION__); 1165d677d1f0879d5101e38df480a38228a64d63959Zhijun He return err; 1175d677d1f0879d5101e38df480a38228a64d63959Zhijun He } 118d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala } 119d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 120d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala mGbp = surfaceShim.graphicBufferProducer; 121b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh mRotation = rotation; 122018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He mSurfaceSetID = setID; 1235d677d1f0879d5101e38df480a38228a64d63959Zhijun He mSurfaceType = surfaceType; 1245d677d1f0879d5101e38df480a38228a64d63959Zhijun He mWidth = width; 1255d677d1f0879d5101e38df480a38228a64d63959Zhijun He mHeight = height; 126b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 1275d677d1f0879d5101e38df480a38228a64d63959Zhijun He ALOGV("%s: OutputConfiguration: bp = %p, name = %s, rotation = %d, setId = %d," 1285d677d1f0879d5101e38df480a38228a64d63959Zhijun He "surfaceType = %d", __FUNCTION__, mGbp.get(), String8(surfaceShim.name).string(), 1295d677d1f0879d5101e38df480a38228a64d63959Zhijun He mRotation, mSurfaceSetID, mSurfaceType); 130d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 131d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala return err; 132b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh} 133b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 134018107a82d80f186d3efca250e38e9c85436a4d9Zhijun HeOutputConfiguration::OutputConfiguration(sp<IGraphicBufferProducer>& gbp, int rotation, 135018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He int surfaceSetID) { 1363450ba7879be6522ea46a56c5e66e5382f5dd5baRuben Brunk mGbp = gbp; 1373450ba7879be6522ea46a56c5e66e5382f5dd5baRuben Brunk mRotation = rotation; 138018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He mSurfaceSetID = surfaceSetID; 1393450ba7879be6522ea46a56c5e66e5382f5dd5baRuben Brunk} 1403450ba7879be6522ea46a56c5e66e5382f5dd5baRuben Brunk 141f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvalastatus_t OutputConfiguration::writeToParcel(android::Parcel* parcel) const { 142d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 143d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala if (parcel == nullptr) return BAD_VALUE; 144d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala status_t err = OK; 145b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 146d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala err = parcel->writeInt32(mRotation); 147d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala if (err != OK) return err; 148d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 149d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala err = parcel->writeInt32(mSurfaceSetID); 150d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala if (err != OK) return err; 151d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 1525d677d1f0879d5101e38df480a38228a64d63959Zhijun He err = parcel->writeInt32(mSurfaceType); 1535d677d1f0879d5101e38df480a38228a64d63959Zhijun He if (err != OK) return err; 1545d677d1f0879d5101e38df480a38228a64d63959Zhijun He 1555d677d1f0879d5101e38df480a38228a64d63959Zhijun He err = parcel->writeInt32(mWidth); 1565d677d1f0879d5101e38df480a38228a64d63959Zhijun He if (err != OK) return err; 1575d677d1f0879d5101e38df480a38228a64d63959Zhijun He 1585d677d1f0879d5101e38df480a38228a64d63959Zhijun He err = parcel->writeInt32(mHeight); 1595d677d1f0879d5101e38df480a38228a64d63959Zhijun He if (err != OK) return err; 1605d677d1f0879d5101e38df480a38228a64d63959Zhijun He 161d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala view::Surface surfaceShim; 162d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala surfaceShim.name = String16("unknown_name"); // name of surface 163d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala surfaceShim.graphicBufferProducer = mGbp; 164d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 165d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala err = surfaceShim.writeToParcel(parcel); 166d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala if (err != OK) return err; 167b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 168b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh return OK; 169b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh} 170b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 171b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh}; // namespace android 172