blob: cf8f3c63151fd00c72a949e9461ebad2406cc60e [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;
Zhijun He5d677d12016-05-29 16:52:39 -070036 enum SurfaceType{
37 SURFACE_TYPE_UNKNOWN = -1,
38 SURFACE_TYPE_SURFACE_VIEW = 0,
39 SURFACE_TYPE_SURFACE_TEXTURE = 1
40 };
Yin-Chia Yehb97babb2015-03-12 13:42:44 -070041 sp<IGraphicBufferProducer> getGraphicBufferProducer() const;
42 int getRotation() const;
Zhijun He018107a2016-01-18 15:32:50 -080043 int getSurfaceSetID() const;
Zhijun He5d677d12016-05-29 16:52:39 -070044 int getSurfaceType() const;
45 int getWidth() const;
46 int getHeight() const;
Yin-Chia Yehb97babb2015-03-12 13:42:44 -070047 /**
48 * Keep impl up-to-date with OutputConfiguration.java in frameworks/base
49 */
Eino-Ville Talvalad56db1d2015-12-17 16:50:35 -080050 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
Yin-Chia Yehb97babb2015-03-12 13:42:44 -070059 // getGraphicBufferProducer will be NULL if error occurred
60 // getRotation will be INVALID_ROTATION if error occurred
Eino-Ville Talvalad56db1d2015-12-17 16:50:35 -080061 // getSurfaceSetID will be INVALID_SET_ID if error occurred
Yin-Chia Yehb97babb2015-03-12 13:42:44 -070062 OutputConfiguration(const Parcel& parcel);
63
Zhijun He018107a2016-01-18 15:32:50 -080064 OutputConfiguration(sp<IGraphicBufferProducer>& gbp, int rotation,
65 int surfaceSetID = INVALID_SET_ID);
Ruben Brunk3450ba72015-06-16 11:00:37 -070066
Yin-Chia Yehead91462016-01-06 16:45:08 -080067 bool operator == (const OutputConfiguration& other) const {
68 return (mGbp == other.mGbp &&
Eino-Ville Talvalad56db1d2015-12-17 16:50:35 -080069 mRotation == other.mRotation &&
Zhijun He5d677d12016-05-29 16:52:39 -070070 mSurfaceSetID == other.mSurfaceSetID &&
71 mSurfaceType == other.mSurfaceType &&
72 mWidth == other.mWidth &&
73 mHeight == other.mHeight);
Yin-Chia Yehead91462016-01-06 16:45:08 -080074 }
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;
Eino-Ville Talvalad56db1d2015-12-17 16:50:35 -080081 if (mSurfaceSetID != other.mSurfaceSetID) {
82 return mSurfaceSetID < other.mSurfaceSetID;
83 }
Zhijun He5d677d12016-05-29 16:52:39 -070084 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
Yin-Chia Yehead91462016-01-06 16:45:08 -080094 return mRotation < other.mRotation;
95 }
96 bool operator > (const OutputConfiguration& other) const {
97 return (*this != other && !(*this < other));
98 }
99
Yin-Chia Yehb97babb2015-03-12 13:42:44 -0700100private:
101 sp<IGraphicBufferProducer> mGbp;
102 int mRotation;
Zhijun He018107a2016-01-18 15:32:50 -0800103 int mSurfaceSetID;
Zhijun He5d677d12016-05-29 16:52:39 -0700104 int mSurfaceType;
105 int mWidth;
106 int mHeight;
Yin-Chia Yehb97babb2015-03-12 13:42:44 -0700107 // helper function
Eino-Ville Talvalad56db1d2015-12-17 16:50:35 -0800108 static String16 readMaybeEmptyString16(const Parcel* parcel);
Yin-Chia Yehb97babb2015-03-12 13:42:44 -0700109};
Eino-Ville Talvalad56db1d2015-12-17 16:50:35 -0800110} // namespace params
111} // namespace camera2
112} // namespace hardware
113
114
115using hardware::camera2::params::OutputConfiguration;
116
Yin-Chia Yehb97babb2015-03-12 13:42:44 -0700117}; // namespace android
118
119#endif