1b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh/*
2b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh**
3b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh** Copyright 2015, The Android Open Source Project
4b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh**
5b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh** Licensed under the Apache License, Version 2.0 (the "License");
6b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh** you may not use this file except in compliance with the License.
7b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh** You may obtain a copy of the License at
8b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh**
9b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh**     http://www.apache.org/licenses/LICENSE-2.0
10b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh**
11b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh** Unless required by applicable law or agreed to in writing, software
12b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh** distributed under the License is distributed on an "AS IS" BASIS,
13b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh** See the License for the specific language governing permissions and
15b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh** limitations under the License.
16b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh*/
17b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh
18b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh#define LOG_TAG "OutputConfiguration"
19d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala//#define LOG_NDEBUG 0
20d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala
21b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh#include <utils/Log.h>
22b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh
23b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh#include <camera/camera2/OutputConfiguration.h>
24d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala#include <gui/Surface.h>
25b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh#include <binder/Parcel.h>
26b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh
27b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yehnamespace android {
28b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh
29b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh
30b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yehconst int OutputConfiguration::INVALID_ROTATION = -1;
31018107a82d80f186d3efca250e38e9c85436a4d9Zhijun Heconst int OutputConfiguration::INVALID_SET_ID = -1;
32b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh
33b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yehsp<IGraphicBufferProducer> OutputConfiguration::getGraphicBufferProducer() const {
34b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh    return mGbp;
35b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh}
36b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh
37b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yehint OutputConfiguration::getRotation() const {
38b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh    return mRotation;
39b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh}
40b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh
41018107a82d80f186d3efca250e38e9c85436a4d9Zhijun Heint OutputConfiguration::getSurfaceSetID() const {
42018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He    return mSurfaceSetID;
43018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He}
44018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He
45d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville TalvalaOutputConfiguration::OutputConfiguration() :
46d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala        mRotation(INVALID_ROTATION),
47d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala        mSurfaceSetID(INVALID_SET_ID) {
48d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala}
49d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala
50d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville TalvalaOutputConfiguration::OutputConfiguration(const Parcel& parcel) :
51d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala        mRotation(INVALID_ROTATION),
52d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala        mSurfaceSetID(INVALID_SET_ID) {
53d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    readFromParcel(&parcel);
54d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala}
55d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala
56d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalastatus_t OutputConfiguration::readFromParcel(const Parcel* parcel) {
57d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    status_t err = OK;
58b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh    int rotation = 0;
59d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala
60d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    if (parcel == nullptr) return BAD_VALUE;
61d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala
62d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    if ((err = parcel->readInt32(&rotation)) != OK) {
63b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh        ALOGE("%s: Failed to read rotation from parcel", __FUNCTION__);
64d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala        return err;
65b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh    }
66b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh
67018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He    int setID = INVALID_SET_ID;
68d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    if ((err = parcel->readInt32(&setID)) != OK) {
69018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He        ALOGE("%s: Failed to read surface set ID from parcel", __FUNCTION__);
70d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala        return err;
71018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He    }
72018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He
73d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    view::Surface surfaceShim;
74d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    if ((err = surfaceShim.readFromParcel(parcel)) != OK) {
75d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala        ALOGE("%s: Failed to read surface from parcel", __FUNCTION__);
76d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala        return err;
77d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    }
78d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala
79d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    mGbp = surfaceShim.graphicBufferProducer;
80b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh    mRotation = rotation;
81018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He    mSurfaceSetID = setID;
82b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh
8302bf03287652923b5bb5316667b065423565d6b4Eino-Ville Talvala    ALOGV("%s: OutputConfiguration: bp = %p, name = %s, rotation = %d, setId = %d", __FUNCTION__,
8402bf03287652923b5bb5316667b065423565d6b4Eino-Ville Talvala            mGbp.get(), String8(surfaceShim.name).string(), mRotation, mSurfaceSetID);
85d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala
86d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    return err;
87b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh}
88b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh
89018107a82d80f186d3efca250e38e9c85436a4d9Zhijun HeOutputConfiguration::OutputConfiguration(sp<IGraphicBufferProducer>& gbp, int rotation,
90018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He        int surfaceSetID) {
913450ba7879be6522ea46a56c5e66e5382f5dd5baRuben Brunk    mGbp = gbp;
923450ba7879be6522ea46a56c5e66e5382f5dd5baRuben Brunk    mRotation = rotation;
93018107a82d80f186d3efca250e38e9c85436a4d9Zhijun He    mSurfaceSetID = surfaceSetID;
943450ba7879be6522ea46a56c5e66e5382f5dd5baRuben Brunk}
953450ba7879be6522ea46a56c5e66e5382f5dd5baRuben Brunk
96d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalastatus_t OutputConfiguration::writeToParcel(Parcel* parcel) const {
97d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala
98d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    if (parcel == nullptr) return BAD_VALUE;
99d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    status_t err = OK;
100b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh
101d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    err = parcel->writeInt32(mRotation);
102d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    if (err != OK) return err;
103d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala
104d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    err = parcel->writeInt32(mSurfaceSetID);
105d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    if (err != OK) return err;
106d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala
107d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    view::Surface surfaceShim;
108d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    surfaceShim.name = String16("unknown_name"); // name of surface
109d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    surfaceShim.graphicBufferProducer = mGbp;
110d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala
111d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    err = surfaceShim.writeToParcel(parcel);
112d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    if (err != OK) return err;
113b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh
114b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh    return OK;
115b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh}
116b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh
117b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh}; // namespace android
118