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 sp<IGraphicBufferProducer> getGraphicBufferProducer() const; 42 int getRotation() const; 43 int getSurfaceSetID() const; 44 int getSurfaceType() const; 45 int getWidth() const; 46 int getHeight() const; 47 /** 48 * Keep impl up-to-date with OutputConfiguration.java in frameworks/base 49 */ 50 virtual status_t writeToParcel(Parcel* parcel) const override; 51 52 virtual status_t readFromParcel(const Parcel* parcel) override; 53 54 // getGraphicBufferProducer will be NULL 55 // getRotation will be INVALID_ROTATION 56 // getSurfaceSetID will be INVALID_SET_ID 57 OutputConfiguration(); 58 59 // getGraphicBufferProducer will be NULL if error occurred 60 // getRotation will be INVALID_ROTATION if error occurred 61 // getSurfaceSetID will be INVALID_SET_ID if error occurred 62 OutputConfiguration(const Parcel& parcel); 63 64 OutputConfiguration(sp<IGraphicBufferProducer>& gbp, int rotation, 65 int surfaceSetID = INVALID_SET_ID); 66 67 bool operator == (const OutputConfiguration& other) const { 68 return (mGbp == other.mGbp && 69 mRotation == other.mRotation && 70 mSurfaceSetID == other.mSurfaceSetID && 71 mSurfaceType == other.mSurfaceType && 72 mWidth == other.mWidth && 73 mHeight == other.mHeight); 74 } 75 bool operator != (const OutputConfiguration& other) const { 76 return !(*this == other); 77 } 78 bool operator < (const OutputConfiguration& other) const { 79 if (*this == other) return false; 80 if (mGbp != other.mGbp) return mGbp < other.mGbp; 81 if (mSurfaceSetID != other.mSurfaceSetID) { 82 return mSurfaceSetID < other.mSurfaceSetID; 83 } 84 if (mSurfaceType != other.mSurfaceType) { 85 return mSurfaceType < other.mSurfaceType; 86 } 87 if (mWidth != other.mWidth) { 88 return mWidth < other.mWidth; 89 } 90 if (mHeight != other.mHeight) { 91 return mHeight < other.mHeight; 92 } 93 94 return mRotation < other.mRotation; 95 } 96 bool operator > (const OutputConfiguration& other) const { 97 return (*this != other && !(*this < other)); 98 } 99 100 private: 101 sp<IGraphicBufferProducer> mGbp; 102 int mRotation; 103 int mSurfaceSetID; 104 int mSurfaceType; 105 int mWidth; 106 int mHeight; 107 // helper function 108 static String16 readMaybeEmptyString16(const Parcel* parcel); 109 }; 110 } // namespace params 111 } // namespace camera2 112 } // namespace hardware 113 114 115 using hardware::camera2::params::OutputConfiguration; 116 117 }; // namespace android 118 119 #endif 120