blob: 72a37536a9755b055753527e62b2c7d52faf3fdf [file] [log] [blame]
Yin-Chia Yehb97babb2015-03-12 13:42:44 -07001/*
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
Yin-Chia Yehb97babb2015-03-12 13:42:44 -070020#include <gui/IGraphicBufferProducer.h>
Eino-Ville Talvalad56db1d2015-12-17 16:50:35 -080021#include <binder/Parcelable.h>
Yin-Chia Yehb97babb2015-03-12 13:42:44 -070022
23namespace android {
24
25class Surface;
26
Eino-Ville Talvalad56db1d2015-12-17 16:50:35 -080027namespace hardware {
28namespace camera2 {
29namespace params {
30
31class OutputConfiguration : public android::Parcelable {
Yin-Chia Yehb97babb2015-03-12 13:42:44 -070032public:
33
34 static const int INVALID_ROTATION;
Zhijun He018107a2016-01-18 15:32:50 -080035 static const int INVALID_SET_ID;
Yin-Chia Yehb97babb2015-03-12 13:42:44 -070036 sp<IGraphicBufferProducer> getGraphicBufferProducer() const;
37 int getRotation() const;
Zhijun He018107a2016-01-18 15:32:50 -080038 int getSurfaceSetID() const;
Yin-Chia Yehb97babb2015-03-12 13:42:44 -070039
40 /**
41 * Keep impl up-to-date with OutputConfiguration.java in frameworks/base
42 */
Eino-Ville Talvalad56db1d2015-12-17 16:50:35 -080043 virtual status_t writeToParcel(Parcel* parcel) const override;
44
45 virtual status_t readFromParcel(const Parcel* parcel) override;
46
47 // getGraphicBufferProducer will be NULL
48 // getRotation will be INVALID_ROTATION
49 // getSurfaceSetID will be INVALID_SET_ID
50 OutputConfiguration();
51
Yin-Chia Yehb97babb2015-03-12 13:42:44 -070052 // getGraphicBufferProducer will be NULL if error occurred
53 // getRotation will be INVALID_ROTATION if error occurred
Eino-Ville Talvalad56db1d2015-12-17 16:50:35 -080054 // getSurfaceSetID will be INVALID_SET_ID if error occurred
Yin-Chia Yehb97babb2015-03-12 13:42:44 -070055 OutputConfiguration(const Parcel& parcel);
56
Zhijun He018107a2016-01-18 15:32:50 -080057 OutputConfiguration(sp<IGraphicBufferProducer>& gbp, int rotation,
58 int surfaceSetID = INVALID_SET_ID);
Ruben Brunk3450ba72015-06-16 11:00:37 -070059
Yin-Chia Yehead91462016-01-06 16:45:08 -080060 bool operator == (const OutputConfiguration& other) const {
61 return (mGbp == other.mGbp &&
Eino-Ville Talvalad56db1d2015-12-17 16:50:35 -080062 mRotation == other.mRotation &&
63 mSurfaceSetID == other.mSurfaceSetID);
Yin-Chia Yehead91462016-01-06 16:45:08 -080064 }
65 bool operator != (const OutputConfiguration& other) const {
66 return !(*this == other);
67 }
68 bool operator < (const OutputConfiguration& other) const {
69 if (*this == other) return false;
70 if (mGbp != other.mGbp) return mGbp < other.mGbp;
Eino-Ville Talvalad56db1d2015-12-17 16:50:35 -080071 if (mSurfaceSetID != other.mSurfaceSetID) {
72 return mSurfaceSetID < other.mSurfaceSetID;
73 }
Yin-Chia Yehead91462016-01-06 16:45:08 -080074 return mRotation < other.mRotation;
75 }
76 bool operator > (const OutputConfiguration& other) const {
77 return (*this != other && !(*this < other));
78 }
79
Yin-Chia Yehb97babb2015-03-12 13:42:44 -070080private:
81 sp<IGraphicBufferProducer> mGbp;
82 int mRotation;
Zhijun He018107a2016-01-18 15:32:50 -080083 int mSurfaceSetID;
Yin-Chia Yehb97babb2015-03-12 13:42:44 -070084 // helper function
Eino-Ville Talvalad56db1d2015-12-17 16:50:35 -080085 static String16 readMaybeEmptyString16(const Parcel* parcel);
Yin-Chia Yehb97babb2015-03-12 13:42:44 -070086};
Eino-Ville Talvalad56db1d2015-12-17 16:50:35 -080087} // namespace params
88} // namespace camera2
89} // namespace hardware
90
91
92using hardware::camera2::params::OutputConfiguration;
93
Yin-Chia Yehb97babb2015-03-12 13:42:44 -070094}; // namespace android
95
96#endif