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