OutputConfiguration.cpp revision 758c215374dba397dabe17b8e96dd38593c09dd7
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>
24b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh#include <binder/Parcel.h>
25f675356f9e275b9a52101a997ad20404922b5147Brian Anderson#include <gui/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
67d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville TalvalaOutputConfiguration::OutputConfiguration() :
68d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala        mRotation(INVALID_ROTATION),
695d677d1f0879d5101e38df480a38228a64d63959Zhijun He        mSurfaceSetID(INVALID_SET_ID),
705d677d1f0879d5101e38df480a38228a64d63959Zhijun He        mSurfaceType(SURFACE_TYPE_UNKNOWN),
715d677d1f0879d5101e38df480a38228a64d63959Zhijun He        mWidth(0),
72758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang        mHeight(0),
73758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang        mIsDeferred(false),
74758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang        mIsShared(false) {
75d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala}
76d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala
77f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville TalvalaOutputConfiguration::OutputConfiguration(const android::Parcel& parcel) :
78d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala        mRotation(INVALID_ROTATION),
79d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala        mSurfaceSetID(INVALID_SET_ID) {
80d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    readFromParcel(&parcel);
81d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala}
82d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala
83f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvalastatus_t OutputConfiguration::readFromParcel(const android::Parcel* parcel) {
84d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    status_t err = OK;
85b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh    int rotation = 0;
86d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala
87d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    if (parcel == nullptr) return BAD_VALUE;
88d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala
89d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    if ((err = parcel->readInt32(&rotation)) != OK) {
90b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh        ALOGE("%s: Failed to read rotation from parcel", __FUNCTION__);
91d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala        return err;
92b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh    }
93b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh
94018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He    int setID = INVALID_SET_ID;
95d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    if ((err = parcel->readInt32(&setID)) != OK) {
96018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He        ALOGE("%s: Failed to read surface set ID from parcel", __FUNCTION__);
97d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala        return err;
98018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He    }
99018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He
1005d677d1f0879d5101e38df480a38228a64d63959Zhijun He    int surfaceType = SURFACE_TYPE_UNKNOWN;
1015d677d1f0879d5101e38df480a38228a64d63959Zhijun He    if ((err = parcel->readInt32(&surfaceType)) != OK) {
1025d677d1f0879d5101e38df480a38228a64d63959Zhijun He        ALOGE("%s: Failed to read surface type from parcel", __FUNCTION__);
1035d677d1f0879d5101e38df480a38228a64d63959Zhijun He        return err;
1045d677d1f0879d5101e38df480a38228a64d63959Zhijun He    }
1055d677d1f0879d5101e38df480a38228a64d63959Zhijun He
1065d677d1f0879d5101e38df480a38228a64d63959Zhijun He    int width = 0;
1075d677d1f0879d5101e38df480a38228a64d63959Zhijun He    if ((err = parcel->readInt32(&width)) != OK) {
1085d677d1f0879d5101e38df480a38228a64d63959Zhijun He        ALOGE("%s: Failed to read surface width from parcel", __FUNCTION__);
1095d677d1f0879d5101e38df480a38228a64d63959Zhijun He        return err;
1105d677d1f0879d5101e38df480a38228a64d63959Zhijun He    }
1115d677d1f0879d5101e38df480a38228a64d63959Zhijun He
1125d677d1f0879d5101e38df480a38228a64d63959Zhijun He    int height = 0;
1135d677d1f0879d5101e38df480a38228a64d63959Zhijun He    if ((err = parcel->readInt32(&height)) != OK) {
1145d677d1f0879d5101e38df480a38228a64d63959Zhijun He        ALOGE("%s: Failed to read surface height from parcel", __FUNCTION__);
1155d677d1f0879d5101e38df480a38228a64d63959Zhijun He        return err;
1165d677d1f0879d5101e38df480a38228a64d63959Zhijun He    }
1175d677d1f0879d5101e38df480a38228a64d63959Zhijun He
118758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang    int isDeferred = 0;
119758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang    if ((err = parcel->readInt32(&isDeferred)) != OK) {
120758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang        ALOGE("%s: Failed to read surface isDeferred flag from parcel", __FUNCTION__);
1210129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang        return err;
1220129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang    }
123758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang
124758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang    int isShared = 0;
125758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang    if ((err = parcel->readInt32(&isShared)) != OK) {
126758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang        ALOGE("%s: Failed to read surface isShared flag from parcel", __FUNCTION__);
127758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang        return err;
128758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang    }
129758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang
130758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang    if (isDeferred && surfaceType != SURFACE_TYPE_SURFACE_VIEW &&
131758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang            surfaceType != SURFACE_TYPE_SURFACE_TEXTURE) {
132758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang        ALOGE("%s: Invalid surface type for deferred configuration", __FUNCTION__);
1330129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang        return BAD_VALUE;
1340129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang    }
1350129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang
136758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang    std::vector<view::Surface> surfaceShims;
137758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang    if ((err = parcel->readParcelableVector(&surfaceShims)) != OK) {
138758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang        ALOGE("%s: Failed to read surface(s) from parcel", __FUNCTION__);
139758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang        return err;
140d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    }
141d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala
142b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh    mRotation = rotation;
143018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He    mSurfaceSetID = setID;
1445d677d1f0879d5101e38df480a38228a64d63959Zhijun He    mSurfaceType = surfaceType;
1455d677d1f0879d5101e38df480a38228a64d63959Zhijun He    mWidth = width;
1465d677d1f0879d5101e38df480a38228a64d63959Zhijun He    mHeight = height;
147758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang    mIsDeferred = isDeferred != 0;
148758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang    mIsShared = isShared != 0;
149758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang    for (auto& surface : surfaceShims) {
150758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang        ALOGV("%s: OutputConfiguration: %p, name %s", __FUNCTION__,
151758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang                surface.graphicBufferProducer.get(),
152758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang                String8(surface.name).string());
153758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang        mGbps.push_back(surface.graphicBufferProducer);
154758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang    }
155b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh
1560129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang    ALOGV("%s: OutputConfiguration: rotation = %d, setId = %d, surfaceType = %d",
1570129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang            __FUNCTION__, mRotation, mSurfaceSetID, mSurfaceType);
158d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala
159d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    return err;
160b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh}
161b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh
162018107a82d80f186d3efca250e38e9c85436a4d9Zhijun HeOutputConfiguration::OutputConfiguration(sp<IGraphicBufferProducer>& gbp, int rotation,
163018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He        int surfaceSetID) {
1640129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang    mGbps.push_back(gbp);
1653450ba7879be6522ea46a56c5e66e5382f5dd5baRuben Brunk    mRotation = rotation;
166018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He    mSurfaceSetID = surfaceSetID;
167758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang    mIsDeferred = false;
168758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang    mIsShared = false;
1693450ba7879be6522ea46a56c5e66e5382f5dd5baRuben Brunk}
1703450ba7879be6522ea46a56c5e66e5382f5dd5baRuben Brunk
171f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvalastatus_t OutputConfiguration::writeToParcel(android::Parcel* parcel) const {
172d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala
173d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    if (parcel == nullptr) return BAD_VALUE;
174d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    status_t err = OK;
175b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh
176d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    err = parcel->writeInt32(mRotation);
177d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    if (err != OK) return err;
178d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala
179d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    err = parcel->writeInt32(mSurfaceSetID);
180d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    if (err != OK) return err;
181d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala
1825d677d1f0879d5101e38df480a38228a64d63959Zhijun He    err = parcel->writeInt32(mSurfaceType);
1835d677d1f0879d5101e38df480a38228a64d63959Zhijun He    if (err != OK) return err;
1845d677d1f0879d5101e38df480a38228a64d63959Zhijun He
1855d677d1f0879d5101e38df480a38228a64d63959Zhijun He    err = parcel->writeInt32(mWidth);
1865d677d1f0879d5101e38df480a38228a64d63959Zhijun He    if (err != OK) return err;
1875d677d1f0879d5101e38df480a38228a64d63959Zhijun He
1885d677d1f0879d5101e38df480a38228a64d63959Zhijun He    err = parcel->writeInt32(mHeight);
1895d677d1f0879d5101e38df480a38228a64d63959Zhijun He    if (err != OK) return err;
1905d677d1f0879d5101e38df480a38228a64d63959Zhijun He
191758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang    err = parcel->writeInt32(mIsDeferred ? 1 : 0);
192d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    if (err != OK) return err;
193b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh
194758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang    err = parcel->writeInt32(mIsShared ? 1 : 0);
195758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang    if (err != OK) return err;
196758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang
197758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang    std::vector<view::Surface> surfaceShims;
198758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang    for (auto& gbp : mGbps) {
1990129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang        view::Surface surfaceShim;
2000129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang        surfaceShim.name = String16("unknown_name"); // name of surface
201758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang        surfaceShim.graphicBufferProducer = gbp;
202758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang        surfaceShims.push_back(surfaceShim);
2030129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang    }
204758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang    err = parcel->writeParcelableVector(surfaceShims);
205758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang    if (err != OK) return err;
2060129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang
207b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh    return OK;
208b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh}
209b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh
2100129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wangbool OutputConfiguration::gbpsEqual(const OutputConfiguration& other) const {
2110129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang    const std::vector<sp<IGraphicBufferProducer> >& otherGbps =
2120129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang            other.getGraphicBufferProducers();
2130129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang
2140129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang    if (mGbps.size() != otherGbps.size()) {
2150129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang        return false;
2160129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang    }
2170129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang
2180129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang    for (size_t i = 0; i < mGbps.size(); i++) {
2190129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang        if (mGbps[i] != otherGbps[i]) {
2200129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang            return false;
2210129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang        }
2220129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang    }
2230129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang
2240129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang    return true;
2250129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang}
2260129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang
2270129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wangbool OutputConfiguration::gbpsLessThan(const OutputConfiguration& other) const {
2280129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang    const std::vector<sp<IGraphicBufferProducer> >& otherGbps =
2290129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang            other.getGraphicBufferProducers();
2300129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang
2310129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang    if (mGbps.size() !=  otherGbps.size()) {
2320129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang        return mGbps.size() < otherGbps.size();
2330129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang    }
2340129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang
2350129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang    for (size_t i = 0; i < mGbps.size(); i++) {
2360129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang        if (mGbps[i] != otherGbps[i]) {
2370129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang            return mGbps[i] < otherGbps[i];
2380129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang        }
2390129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang    }
2400129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang
2410129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang    return false;
2420129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang}
243b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh}; // namespace android
244