1b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh/* 2b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh * Copyright (C) 2015 The Android Open Source Project 3b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh * 4b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh * Licensed under the Apache License, Version 2.0 (the "License"); 5b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh * you may not use this file except in compliance with the License. 6b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh * You may obtain a copy of the License at 7b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh * 8b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh * http://www.apache.org/licenses/LICENSE-2.0 9b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh * 10b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh * Unless required by applicable law or agreed to in writing, software 11b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh * distributed under the License is distributed on an "AS IS" BASIS, 12b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh * See the License for the specific language governing permissions and 14b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh * limitations under the License. 15b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh */ 16b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 17b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh#ifndef ANDROID_HARDWARE_CAMERA2_OUTPUTCONFIGURATION_H 18b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh#define ANDROID_HARDWARE_CAMERA2_OUTPUTCONFIGURATION_H 19b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 20b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh#include <gui/IGraphicBufferProducer.h> 21d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala#include <binder/Parcelable.h> 22b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 23b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yehnamespace android { 24b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 25b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yehclass Surface; 26b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 27d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalanamespace hardware { 28d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalanamespace camera2 { 29d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalanamespace params { 30d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 31d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalaclass OutputConfiguration : public android::Parcelable { 32b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yehpublic: 33b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 34b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh static const int INVALID_ROTATION; 35018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He static const int INVALID_SET_ID; 365d677d1f0879d5101e38df480a38228a64d63959Zhijun He enum SurfaceType{ 375d677d1f0879d5101e38df480a38228a64d63959Zhijun He SURFACE_TYPE_UNKNOWN = -1, 385d677d1f0879d5101e38df480a38228a64d63959Zhijun He SURFACE_TYPE_SURFACE_VIEW = 0, 395d677d1f0879d5101e38df480a38228a64d63959Zhijun He SURFACE_TYPE_SURFACE_TEXTURE = 1 405d677d1f0879d5101e38df480a38228a64d63959Zhijun He }; 410129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang const std::vector<sp<IGraphicBufferProducer>>& getGraphicBufferProducers() const; 42b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh int getRotation() const; 43018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He int getSurfaceSetID() const; 445d677d1f0879d5101e38df480a38228a64d63959Zhijun He int getSurfaceType() const; 455d677d1f0879d5101e38df480a38228a64d63959Zhijun He int getWidth() const; 465d677d1f0879d5101e38df480a38228a64d63959Zhijun He int getHeight() const; 47758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang bool isDeferred() const; 48758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang bool isShared() const; 49b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh /** 50b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh * Keep impl up-to-date with OutputConfiguration.java in frameworks/base 51b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh */ 52f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala virtual status_t writeToParcel(android::Parcel* parcel) const override; 53d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 54f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala virtual status_t readFromParcel(const android::Parcel* parcel) override; 55d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 56d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala // getGraphicBufferProducer will be NULL 57d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala // getRotation will be INVALID_ROTATION 58d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala // getSurfaceSetID will be INVALID_SET_ID 59d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala OutputConfiguration(); 60d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 61b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh // getGraphicBufferProducer will be NULL if error occurred 62b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh // getRotation will be INVALID_ROTATION if error occurred 63d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala // getSurfaceSetID will be INVALID_SET_ID if error occurred 64f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala OutputConfiguration(const android::Parcel& parcel); 65b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 66018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He OutputConfiguration(sp<IGraphicBufferProducer>& gbp, int rotation, 67018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He int surfaceSetID = INVALID_SET_ID); 683450ba7879be6522ea46a56c5e66e5382f5dd5baRuben Brunk 69ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh bool operator == (const OutputConfiguration& other) const { 700129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang return ( mRotation == other.mRotation && 715d677d1f0879d5101e38df480a38228a64d63959Zhijun He mSurfaceSetID == other.mSurfaceSetID && 725d677d1f0879d5101e38df480a38228a64d63959Zhijun He mSurfaceType == other.mSurfaceType && 735d677d1f0879d5101e38df480a38228a64d63959Zhijun He mWidth == other.mWidth && 740129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang mHeight == other.mHeight && 75758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang mIsDeferred == other.mIsDeferred && 76758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang mIsShared == other.mIsShared && 770129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang gbpsEqual(other)); 78ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh } 79ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh bool operator != (const OutputConfiguration& other) const { 80ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh return !(*this == other); 81ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh } 82ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh bool operator < (const OutputConfiguration& other) const { 83ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh if (*this == other) return false; 84d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala if (mSurfaceSetID != other.mSurfaceSetID) { 85d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala return mSurfaceSetID < other.mSurfaceSetID; 86d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala } 875d677d1f0879d5101e38df480a38228a64d63959Zhijun He if (mSurfaceType != other.mSurfaceType) { 885d677d1f0879d5101e38df480a38228a64d63959Zhijun He return mSurfaceType < other.mSurfaceType; 895d677d1f0879d5101e38df480a38228a64d63959Zhijun He } 905d677d1f0879d5101e38df480a38228a64d63959Zhijun He if (mWidth != other.mWidth) { 915d677d1f0879d5101e38df480a38228a64d63959Zhijun He return mWidth < other.mWidth; 925d677d1f0879d5101e38df480a38228a64d63959Zhijun He } 935d677d1f0879d5101e38df480a38228a64d63959Zhijun He if (mHeight != other.mHeight) { 945d677d1f0879d5101e38df480a38228a64d63959Zhijun He return mHeight < other.mHeight; 955d677d1f0879d5101e38df480a38228a64d63959Zhijun He } 960129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang if (mRotation != other.mRotation) { 970129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang return mRotation < other.mRotation; 980129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang } 99758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang if (mIsDeferred != other.mIsDeferred) { 100758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang return mIsDeferred < other.mIsDeferred; 101758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang } 102758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang if (mIsShared != other.mIsShared) { 103758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang return mIsShared < other.mIsShared; 104758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang } 1050129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang return gbpsLessThan(other); 106ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh } 107ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh bool operator > (const OutputConfiguration& other) const { 108ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh return (*this != other && !(*this < other)); 109ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh } 110ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh 1110129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang bool gbpsEqual(const OutputConfiguration& other) const; 1120129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang bool gbpsLessThan(const OutputConfiguration& other) const; 113b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yehprivate: 1140129d52df9794d6fdf06be304722b5cb51a2eab5Shuzhen Wang std::vector<sp<IGraphicBufferProducer>> mGbps; 115b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh int mRotation; 116018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He int mSurfaceSetID; 1175d677d1f0879d5101e38df480a38228a64d63959Zhijun He int mSurfaceType; 1185d677d1f0879d5101e38df480a38228a64d63959Zhijun He int mWidth; 1195d677d1f0879d5101e38df480a38228a64d63959Zhijun He int mHeight; 120758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang bool mIsDeferred; 121758c215374dba397dabe17b8e96dd38593c09dd7Shuzhen Wang bool mIsShared; 122b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh // helper function 123f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala static String16 readMaybeEmptyString16(const android::Parcel* parcel); 124b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh}; 125d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} // namespace params 126d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} // namespace camera2 127d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} // namespace hardware 128d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 129d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 130d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalausing hardware::camera2::params::OutputConfiguration; 131d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 132b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh}; // namespace android 133b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh 134b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh#endif 135