OutputConfiguration.h revision e2b43843fd12783188edd2c54188ea8d26864788
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
23namespace android {
24
25class Surface;
26
27namespace hardware {
28namespace camera2 {
29namespace params {
30
31class OutputConfiguration : public android::Parcelable {
32public:
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    const std::vector<sp<IGraphicBufferProducer>>& getGraphicBufferProducers() const;
42    int                        getRotation() const;
43    int                        getSurfaceSetID() const;
44    int                        getSurfaceType() const;
45    int                        getWidth() const;
46    int                        getHeight() const;
47    bool                       isDeferred() const;
48    bool                       isShared() const;
49    /**
50     * Keep impl up-to-date with OutputConfiguration.java in frameworks/base
51     */
52    virtual status_t           writeToParcel(android::Parcel* parcel) const override;
53
54    virtual status_t           readFromParcel(const android::Parcel* parcel) override;
55
56    // getGraphicBufferProducer will be NULL
57    // getRotation will be INVALID_ROTATION
58    // getSurfaceSetID will be INVALID_SET_ID
59    OutputConfiguration();
60
61    // getGraphicBufferProducer will be NULL if error occurred
62    // getRotation will be INVALID_ROTATION if error occurred
63    // getSurfaceSetID will be INVALID_SET_ID if error occurred
64    OutputConfiguration(const android::Parcel& parcel);
65
66    OutputConfiguration(sp<IGraphicBufferProducer>& gbp, int rotation,
67            int surfaceSetID = INVALID_SET_ID);
68
69    bool operator == (const OutputConfiguration& other) const {
70        return ( mRotation == other.mRotation &&
71                mSurfaceSetID == other.mSurfaceSetID &&
72                mSurfaceType == other.mSurfaceType &&
73                mWidth == other.mWidth &&
74                mHeight == other.mHeight &&
75                mIsDeferred == other.mIsDeferred &&
76                mIsShared == other.mIsShared &&
77                gbpsEqual(other));
78    }
79    bool operator != (const OutputConfiguration& other) const {
80        return !(*this == other);
81    }
82    bool operator < (const OutputConfiguration& other) const {
83        if (*this == other) return false;
84        if (mSurfaceSetID != other.mSurfaceSetID) {
85            return mSurfaceSetID < other.mSurfaceSetID;
86        }
87        if (mSurfaceType != other.mSurfaceType) {
88            return mSurfaceType < other.mSurfaceType;
89        }
90        if (mWidth != other.mWidth) {
91            return mWidth < other.mWidth;
92        }
93        if (mHeight != other.mHeight) {
94            return mHeight < other.mHeight;
95        }
96        if (mRotation != other.mRotation) {
97            return mRotation < other.mRotation;
98        }
99        if (mIsDeferred != other.mIsDeferred) {
100            return mIsDeferred < other.mIsDeferred;
101        }
102        if (mIsShared != other.mIsShared) {
103            return mIsShared < other.mIsShared;
104        }
105        return gbpsLessThan(other);
106    }
107    bool operator > (const OutputConfiguration& other) const {
108        return (*this != other && !(*this < other));
109    }
110
111    bool gbpsEqual(const OutputConfiguration& other) const;
112    bool gbpsLessThan(const OutputConfiguration& other) const;
113private:
114    std::vector<sp<IGraphicBufferProducer>> mGbps;
115    int                        mRotation;
116    int                        mSurfaceSetID;
117    int                        mSurfaceType;
118    int                        mWidth;
119    int                        mHeight;
120    bool                       mIsDeferred;
121    bool                       mIsShared;
122    // helper function
123    static String16 readMaybeEmptyString16(const android::Parcel* parcel);
124};
125} // namespace params
126} // namespace camera2
127} // namespace hardware
128
129
130using hardware::camera2::params::OutputConfiguration;
131
132}; // namespace android
133
134#endif
135