1 /* 2 * Copyright (C) 2018 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_SESSIONCONFIGURATION_H 18 #define ANDROID_HARDWARE_CAMERA2_SESSIONCONFIGURATION_H 19 20 #include <binder/Parcelable.h> 21 22 namespace android { 23 24 namespace hardware { 25 namespace camera2 { 26 namespace params { 27 28 class OutputConfiguration; 29 30 class SessionConfiguration : public android::Parcelable { 31 public: 32 getOutputConfigurations()33 const std::vector<OutputConfiguration>& getOutputConfigurations() const { 34 return mOutputStreams; 35 } 36 getInputWidth()37 int getInputWidth() const { return mInputWidth; } getInputHeight()38 int getInputHeight() const { return mInputHeight; } getInputFormat()39 int getInputFormat() const { return mInputFormat; } getOperatingMode()40 int getOperatingMode() const { return mOperatingMode; } 41 42 virtual status_t writeToParcel(android::Parcel* parcel) const override; 43 virtual status_t readFromParcel(const android::Parcel* parcel) override; 44 SessionConfiguration()45 SessionConfiguration() : 46 mInputWidth(0), 47 mInputHeight(0), 48 mInputFormat(-1), 49 mOperatingMode(-1) {} 50 SessionConfiguration(const android::Parcel & parcel)51 SessionConfiguration(const android::Parcel& parcel) { 52 readFromParcel(&parcel); 53 } 54 SessionConfiguration(int inputWidth,int inputHeight,int inputFormat,int operatingMode)55 SessionConfiguration(int inputWidth, int inputHeight, int inputFormat, int operatingMode) : 56 mInputWidth(inputWidth), mInputHeight(inputHeight), mInputFormat(inputFormat), 57 mOperatingMode(operatingMode) {} 58 59 bool operator == (const SessionConfiguration& other) const { 60 return (outputsEqual(other) && 61 mInputWidth == other.mInputWidth && 62 mInputHeight == other.mInputHeight && 63 mInputFormat == other.mInputFormat && 64 mOperatingMode == other.mOperatingMode); 65 } 66 67 bool operator != (const SessionConfiguration& other) const { 68 return !(*this == other); 69 } 70 71 bool operator < (const SessionConfiguration& other) const { 72 if (*this == other) return false; 73 74 if (mInputWidth != other.mInputWidth) { 75 return mInputWidth < other.mInputWidth; 76 } 77 78 if (mInputHeight != other.mInputHeight) { 79 return mInputHeight < other.mInputHeight; 80 } 81 82 if (mInputFormat != other.mInputFormat) { 83 return mInputFormat < other.mInputFormat; 84 } 85 86 if (mOperatingMode != other.mOperatingMode) { 87 return mOperatingMode < other.mOperatingMode; 88 } 89 90 return outputsLessThan(other); 91 } 92 93 bool operator > (const SessionConfiguration& other) const { 94 return (*this != other && !(*this < other)); 95 } 96 97 bool outputsEqual(const SessionConfiguration& other) const; 98 bool outputsLessThan(const SessionConfiguration& other) const; addOutputConfiguration(const OutputConfiguration & config)99 void addOutputConfiguration(const OutputConfiguration &config) { 100 mOutputStreams.push_back(config); 101 } 102 103 private: 104 105 std::vector<OutputConfiguration> mOutputStreams; 106 int mInputWidth, mInputHeight, mInputFormat, mOperatingMode; 107 }; 108 } // namespace params 109 } // namespace camera2 110 } // namespace hardware 111 112 using hardware::camera2::params::SessionConfiguration; 113 114 }; // namespace android 115 116 #endif 117