• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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