1b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh/* 2b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh** 3c28189a64a6ef65aecccb6e3bb980f1afc189a1cShuzhen Wang** Copyright 2015-2018, 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> 24b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh#include <binder/Parcel.h> 25032845cc878f538e3336c96e1c24668953eab971Mathias Agopian#include <gui/view/Surface.h> 26f675356f9e275b9a52101a997ad20404922b5147Brian Anderson#include <utils/String8.h> 27b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 28b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yehnamespace android { 29b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 30b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 31b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yehconst int OutputConfiguration::INVALID_ROTATION = -1; 32018107a82d80f186d3efca250e38e9c85436a4d9Zhijun Heconst int OutputConfiguration::INVALID_SET_ID = -1; 33b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 340129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wangconst std::vector<sp<IGraphicBufferProducer>>& 350129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang OutputConfiguration::getGraphicBufferProducers() const { 360129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang return mGbps; 37b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh} 38b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 39b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yehint OutputConfiguration::getRotation() const { 40b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh return mRotation; 41b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh} 42b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 43018107a82d80f186d3efca250e38e9c85436a4d9Zhijun Heint OutputConfiguration::getSurfaceSetID() const { 44018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He return mSurfaceSetID; 45018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He} 46018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He 475d677d1f0879d5101e38df480a38228a64d63959Zhijun Heint OutputConfiguration::getSurfaceType() const { 485d677d1f0879d5101e38df480a38228a64d63959Zhijun He return mSurfaceType; 495d677d1f0879d5101e38df480a38228a64d63959Zhijun He} 505d677d1f0879d5101e38df480a38228a64d63959Zhijun He 515d677d1f0879d5101e38df480a38228a64d63959Zhijun Heint OutputConfiguration::getWidth() const { 525d677d1f0879d5101e38df480a38228a64d63959Zhijun He return mWidth; 535d677d1f0879d5101e38df480a38228a64d63959Zhijun He} 545d677d1f0879d5101e38df480a38228a64d63959Zhijun He 555d677d1f0879d5101e38df480a38228a64d63959Zhijun Heint OutputConfiguration::getHeight() const { 565d677d1f0879d5101e38df480a38228a64d63959Zhijun He return mHeight; 575d677d1f0879d5101e38df480a38228a64d63959Zhijun He} 585d677d1f0879d5101e38df480a38228a64d63959Zhijun He 59758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wangbool OutputConfiguration::isDeferred() const { 60758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang return mIsDeferred; 61758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang} 62758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang 63758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wangbool OutputConfiguration::isShared() const { 64758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang return mIsShared; 65758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang} 66758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang 67c28189a64a6ef65aecccb6e3bb980f1afc189a1cShuzhen WangString16 OutputConfiguration::getPhysicalCameraId() const { 68c28189a64a6ef65aecccb6e3bb980f1afc189a1cShuzhen Wang return mPhysicalCameraId; 69c28189a64a6ef65aecccb6e3bb980f1afc189a1cShuzhen Wang} 70c28189a64a6ef65aecccb6e3bb980f1afc189a1cShuzhen Wang 71d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville TalvalaOutputConfiguration::OutputConfiguration() : 72d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala mRotation(INVALID_ROTATION), 735d677d1f0879d5101e38df480a38228a64d63959Zhijun He mSurfaceSetID(INVALID_SET_ID), 745d677d1f0879d5101e38df480a38228a64d63959Zhijun He mSurfaceType(SURFACE_TYPE_UNKNOWN), 755d677d1f0879d5101e38df480a38228a64d63959Zhijun He mWidth(0), 76758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang mHeight(0), 77758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang mIsDeferred(false), 78758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang mIsShared(false) { 79d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} 80d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 81f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville TalvalaOutputConfiguration::OutputConfiguration(const android::Parcel& parcel) : 82d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala mRotation(INVALID_ROTATION), 83d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala mSurfaceSetID(INVALID_SET_ID) { 84d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala readFromParcel(&parcel); 85d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} 86d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 87f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvalastatus_t OutputConfiguration::readFromParcel(const android::Parcel* parcel) { 88d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala status_t err = OK; 89b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh int rotation = 0; 90d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 91d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala if (parcel == nullptr) return BAD_VALUE; 92d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 93d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala if ((err = parcel->readInt32(&rotation)) != OK) { 94b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh ALOGE("%s: Failed to read rotation from parcel", __FUNCTION__); 95d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala return err; 96b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh } 97b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 98018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He int setID = INVALID_SET_ID; 99d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala if ((err = parcel->readInt32(&setID)) != OK) { 100018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He ALOGE("%s: Failed to read surface set ID from parcel", __FUNCTION__); 101d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala return err; 102018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He } 103018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He 1045d677d1f0879d5101e38df480a38228a64d63959Zhijun He int surfaceType = SURFACE_TYPE_UNKNOWN; 1055d677d1f0879d5101e38df480a38228a64d63959Zhijun He if ((err = parcel->readInt32(&surfaceType)) != OK) { 1065d677d1f0879d5101e38df480a38228a64d63959Zhijun He ALOGE("%s: Failed to read surface type from parcel", __FUNCTION__); 1075d677d1f0879d5101e38df480a38228a64d63959Zhijun He return err; 1085d677d1f0879d5101e38df480a38228a64d63959Zhijun He } 1095d677d1f0879d5101e38df480a38228a64d63959Zhijun He 1105d677d1f0879d5101e38df480a38228a64d63959Zhijun He int width = 0; 1115d677d1f0879d5101e38df480a38228a64d63959Zhijun He if ((err = parcel->readInt32(&width)) != OK) { 1125d677d1f0879d5101e38df480a38228a64d63959Zhijun He ALOGE("%s: Failed to read surface width from parcel", __FUNCTION__); 1135d677d1f0879d5101e38df480a38228a64d63959Zhijun He return err; 1145d677d1f0879d5101e38df480a38228a64d63959Zhijun He } 1155d677d1f0879d5101e38df480a38228a64d63959Zhijun He 1165d677d1f0879d5101e38df480a38228a64d63959Zhijun He int height = 0; 1175d677d1f0879d5101e38df480a38228a64d63959Zhijun He if ((err = parcel->readInt32(&height)) != OK) { 1185d677d1f0879d5101e38df480a38228a64d63959Zhijun He ALOGE("%s: Failed to read surface height from parcel", __FUNCTION__); 1195d677d1f0879d5101e38df480a38228a64d63959Zhijun He return err; 1205d677d1f0879d5101e38df480a38228a64d63959Zhijun He } 1215d677d1f0879d5101e38df480a38228a64d63959Zhijun He 122758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang int isDeferred = 0; 123758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang if ((err = parcel->readInt32(&isDeferred)) != OK) { 124758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang ALOGE("%s: Failed to read surface isDeferred flag from parcel", __FUNCTION__); 1250129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang return err; 1260129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang } 127758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang 128758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang int isShared = 0; 129758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang if ((err = parcel->readInt32(&isShared)) != OK) { 130758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang ALOGE("%s: Failed to read surface isShared flag from parcel", __FUNCTION__); 131758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang return err; 132758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang } 133758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang 134758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang if (isDeferred && surfaceType != SURFACE_TYPE_SURFACE_VIEW && 135758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang surfaceType != SURFACE_TYPE_SURFACE_TEXTURE) { 136758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang ALOGE("%s: Invalid surface type for deferred configuration", __FUNCTION__); 1370129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang return BAD_VALUE; 1380129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang } 1390129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang 140758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang std::vector<view::Surface> surfaceShims; 141758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang if ((err = parcel->readParcelableVector(&surfaceShims)) != OK) { 142758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang ALOGE("%s: Failed to read surface(s) from parcel", __FUNCTION__); 143758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang return err; 144d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala } 145d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 146c28189a64a6ef65aecccb6e3bb980f1afc189a1cShuzhen Wang parcel->readString16(&mPhysicalCameraId); 147c28189a64a6ef65aecccb6e3bb980f1afc189a1cShuzhen Wang 148b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh mRotation = rotation; 149018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He mSurfaceSetID = setID; 1505d677d1f0879d5101e38df480a38228a64d63959Zhijun He mSurfaceType = surfaceType; 1515d677d1f0879d5101e38df480a38228a64d63959Zhijun He mWidth = width; 1525d677d1f0879d5101e38df480a38228a64d63959Zhijun He mHeight = height; 153758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang mIsDeferred = isDeferred != 0; 154758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang mIsShared = isShared != 0; 155758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang for (auto& surface : surfaceShims) { 156758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang ALOGV("%s: OutputConfiguration: %p, name %s", __FUNCTION__, 157758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang surface.graphicBufferProducer.get(), 158758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang String8(surface.name).string()); 159758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang mGbps.push_back(surface.graphicBufferProducer); 160758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang } 161b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 162c28189a64a6ef65aecccb6e3bb980f1afc189a1cShuzhen Wang ALOGV("%s: OutputConfiguration: rotation = %d, setId = %d, surfaceType = %d," 163c28189a64a6ef65aecccb6e3bb980f1afc189a1cShuzhen Wang " physicalCameraId = %s", __FUNCTION__, mRotation, mSurfaceSetID, 164c28189a64a6ef65aecccb6e3bb980f1afc189a1cShuzhen Wang mSurfaceType, String8(mPhysicalCameraId).string()); 165d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 166d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala return err; 167b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh} 168b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 169018107a82d80f186d3efca250e38e9c85436a4d9Zhijun HeOutputConfiguration::OutputConfiguration(sp<IGraphicBufferProducer>& gbp, int rotation, 17040ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev int surfaceSetID, bool isShared) { 1710129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang mGbps.push_back(gbp); 1723450ba7879be6522ea46a56c5e66e5382f5dd5baRuben Brunk mRotation = rotation; 173018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He mSurfaceSetID = surfaceSetID; 174758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang mIsDeferred = false; 17540ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev mIsShared = isShared; 1763450ba7879be6522ea46a56c5e66e5382f5dd5baRuben Brunk} 1773450ba7879be6522ea46a56c5e66e5382f5dd5baRuben Brunk 178f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvalastatus_t OutputConfiguration::writeToParcel(android::Parcel* parcel) const { 179d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 180d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala if (parcel == nullptr) return BAD_VALUE; 181d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala status_t err = OK; 182b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 183d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala err = parcel->writeInt32(mRotation); 184d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala if (err != OK) return err; 185d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 186d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala err = parcel->writeInt32(mSurfaceSetID); 187d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala if (err != OK) return err; 188d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 1895d677d1f0879d5101e38df480a38228a64d63959Zhijun He err = parcel->writeInt32(mSurfaceType); 1905d677d1f0879d5101e38df480a38228a64d63959Zhijun He if (err != OK) return err; 1915d677d1f0879d5101e38df480a38228a64d63959Zhijun He 1925d677d1f0879d5101e38df480a38228a64d63959Zhijun He err = parcel->writeInt32(mWidth); 1935d677d1f0879d5101e38df480a38228a64d63959Zhijun He if (err != OK) return err; 1945d677d1f0879d5101e38df480a38228a64d63959Zhijun He 1955d677d1f0879d5101e38df480a38228a64d63959Zhijun He err = parcel->writeInt32(mHeight); 1965d677d1f0879d5101e38df480a38228a64d63959Zhijun He if (err != OK) return err; 1975d677d1f0879d5101e38df480a38228a64d63959Zhijun He 198758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang err = parcel->writeInt32(mIsDeferred ? 1 : 0); 199d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala if (err != OK) return err; 200b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 201758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang err = parcel->writeInt32(mIsShared ? 1 : 0); 202758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang if (err != OK) return err; 203758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang 204758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang std::vector<view::Surface> surfaceShims; 205758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang for (auto& gbp : mGbps) { 2060129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang view::Surface surfaceShim; 2070129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang surfaceShim.name = String16("unknown_name"); // name of surface 208758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang surfaceShim.graphicBufferProducer = gbp; 209758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang surfaceShims.push_back(surfaceShim); 2100129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang } 211758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang err = parcel->writeParcelableVector(surfaceShims); 212758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang if (err != OK) return err; 2130129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang 214c28189a64a6ef65aecccb6e3bb980f1afc189a1cShuzhen Wang err = parcel->writeString16(mPhysicalCameraId); 215c28189a64a6ef65aecccb6e3bb980f1afc189a1cShuzhen Wang if (err != OK) return err; 216c28189a64a6ef65aecccb6e3bb980f1afc189a1cShuzhen Wang 217b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh return OK; 218b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh} 219b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 2200129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wangbool OutputConfiguration::gbpsEqual(const OutputConfiguration& other) const { 2210129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang const std::vector<sp<IGraphicBufferProducer> >& otherGbps = 2220129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang other.getGraphicBufferProducers(); 2230129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang 2240129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang if (mGbps.size() != otherGbps.size()) { 2250129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang return false; 2260129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang } 2270129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang 2280129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang for (size_t i = 0; i < mGbps.size(); i++) { 2290129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang if (mGbps[i] != otherGbps[i]) { 2300129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang return false; 2310129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang } 2320129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang } 2330129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang 2340129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang return true; 2350129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang} 2360129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang 2370129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wangbool OutputConfiguration::gbpsLessThan(const OutputConfiguration& other) const { 2380129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang const std::vector<sp<IGraphicBufferProducer> >& otherGbps = 2390129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang other.getGraphicBufferProducers(); 2400129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang 2410129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang if (mGbps.size() != otherGbps.size()) { 2420129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang return mGbps.size() < otherGbps.size(); 2430129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang } 2440129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang 2450129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang for (size_t i = 0; i < mGbps.size(); i++) { 2460129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang if (mGbps[i] != otherGbps[i]) { 2470129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang return mGbps[i] < otherGbps[i]; 2480129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang } 2490129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang } 2500129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang 2510129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang return false; 2520129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang} 253b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh}; // namespace android 254