1 /* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef ANDROID_HARDWARE_CAMERA2_OUTPUTCONFIGURATION_H 18 #define ANDROID_HARDWARE_CAMERA2_OUTPUTCONFIGURATION_H 19 20 #include <gui/IGraphicBufferProducer.h> 21 #include <binder/Parcelable.h> 22 23 namespace android { 24 25 class Surface; 26 27 namespace hardware { 28 namespace camera2 { 29 namespace params { 30 31 class OutputConfiguration : public android::Parcelable { 32 public: 33 34 static const int INVALID_ROTATION; 35 static const int INVALID_SET_ID; 36 enum SurfaceType{ 37 SURFACE_TYPE_UNKNOWN = -1, 38 SURFACE_TYPE_SURFACE_VIEW = 0, 39 SURFACE_TYPE_SURFACE_TEXTURE = 1 40 }; 41 const std::vector<sp<IGraphicBufferProducer>>& getGraphicBufferProducers() const; 42 int getRotation() const; 43 int getSurfaceSetID() const; 44 int getSurfaceType() const; 45 int getWidth() const; 46 int getHeight() const; 47 bool isDeferred() const; 48 bool isShared() const; 49 /** 50 * Keep impl up-to-date with OutputConfiguration.java in frameworks/base 51 */ 52 virtual status_t writeToParcel(android::Parcel* parcel) const override; 53 54 virtual status_t readFromParcel(const android::Parcel* parcel) override; 55 56 // getGraphicBufferProducer will be NULL 57 // getRotation will be INVALID_ROTATION 58 // getSurfaceSetID will be INVALID_SET_ID 59 OutputConfiguration(); 60 61 // getGraphicBufferProducer will be NULL if error occurred 62 // getRotation will be INVALID_ROTATION if error occurred 63 // getSurfaceSetID will be INVALID_SET_ID if error occurred 64 OutputConfiguration(const android::Parcel& parcel); 65 66 OutputConfiguration(sp<IGraphicBufferProducer>& gbp, int rotation, 67 int surfaceSetID = INVALID_SET_ID); 68 69 bool operator == (const OutputConfiguration& other) const { 70 return ( mRotation == other.mRotation && 71 mSurfaceSetID == other.mSurfaceSetID && 72 mSurfaceType == other.mSurfaceType && 73 mWidth == other.mWidth && 74 mHeight == other.mHeight && 75 mIsDeferred == other.mIsDeferred && 76 mIsShared == other.mIsShared && 77 gbpsEqual(other)); 78 } 79 bool operator != (const OutputConfiguration& other) const { 80 return !(*this == other); 81 } 82 bool operator < (const OutputConfiguration& other) const { 83 if (*this == other) return false; 84 if (mSurfaceSetID != other.mSurfaceSetID) { 85 return mSurfaceSetID < other.mSurfaceSetID; 86 } 87 if (mSurfaceType != other.mSurfaceType) { 88 return mSurfaceType < other.mSurfaceType; 89 } 90 if (mWidth != other.mWidth) { 91 return mWidth < other.mWidth; 92 } 93 if (mHeight != other.mHeight) { 94 return mHeight < other.mHeight; 95 } 96 if (mRotation != other.mRotation) { 97 return mRotation < other.mRotation; 98 } 99 if (mIsDeferred != other.mIsDeferred) { 100 return mIsDeferred < other.mIsDeferred; 101 } 102 if (mIsShared != other.mIsShared) { 103 return mIsShared < other.mIsShared; 104 } 105 return gbpsLessThan(other); 106 } 107 bool operator > (const OutputConfiguration& other) const { 108 return (*this != other && !(*this < other)); 109 } 110 111 bool gbpsEqual(const OutputConfiguration& other) const; 112 bool gbpsLessThan(const OutputConfiguration& other) const; 113 private: 114 std::vector<sp<IGraphicBufferProducer>> mGbps; 115 int mRotation; 116 int mSurfaceSetID; 117 int mSurfaceType; 118 int mWidth; 119 int mHeight; 120 bool mIsDeferred; 121 bool mIsShared; 122 // helper function 123 static String16 readMaybeEmptyString16(const android::Parcel* parcel); 124 }; 125 } // namespace params 126 } // namespace camera2 127 } // namespace hardware 128 129 130 using hardware::camera2::params::OutputConfiguration; 131 132 }; // namespace android 133 134 #endif 135