1e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin/*
2e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin**
3e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** Copyright 2013, The Android Open Source Project
4e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin**
5e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** Licensed under the Apache License, Version 2.0 (the "License");
6e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** you may not use this file except in compliance with the License.
7e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** You may obtain a copy of the License at
8e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin**
9e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin**     http://www.apache.org/licenses/LICENSE-2.0
10e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin**
11e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** Unless required by applicable law or agreed to in writing, software
12e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** distributed under the License is distributed on an "AS IS" BASIS,
13e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** See the License for the specific language governing permissions and
15e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin** limitations under the License.
16e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin*/
17e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
18e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin// #define LOG_NDEBUG 0
19e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#define LOG_TAG "CameraRequest"
20e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#include <utils/Log.h>
21aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev#include <utils/String16.h>
22e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
237b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala#include <camera/camera2/CaptureRequest.h>
24e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
25e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#include <binder/Parcel.h>
26e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#include <gui/Surface.h>
27032845cc878f538e3336c96e1c24668953eab971Mathias Agopian#include <gui/view/Surface.h>
28e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
29e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkinnamespace android {
30d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalanamespace hardware {
31d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalanamespace camera2 {
32e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
33032845cc878f538e3336c96e1c24668953eab971Mathias Agopian// These must be in the .cpp (to avoid inlining)
34032845cc878f538e3336c96e1c24668953eab971Mathias AgopianCaptureRequest::CaptureRequest() = default;
35032845cc878f538e3336c96e1c24668953eab971Mathias AgopianCaptureRequest::~CaptureRequest() = default;
36032845cc878f538e3336c96e1c24668953eab971Mathias AgopianCaptureRequest::CaptureRequest(const CaptureRequest& rhs) = default;
37032845cc878f538e3336c96e1c24668953eab971Mathias AgopianCaptureRequest::CaptureRequest(CaptureRequest&& rhs) noexcept = default;
38032845cc878f538e3336c96e1c24668953eab971Mathias Agopian
39032845cc878f538e3336c96e1c24668953eab971Mathias Agopian
40f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvalastatus_t CaptureRequest::readFromParcel(const android::Parcel* parcel) {
41e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    if (parcel == NULL) {
42e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin        ALOGE("%s: Null parcel", __FUNCTION__);
43e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin        return BAD_VALUE;
44e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    }
45e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
46e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    mSurfaceList.clear();
474dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh    mStreamIdxList.clear();
484dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh    mSurfaceIdxList.clear();
49aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev    mPhysicalCameraSettings.clear();
50e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
5148932bbf9f1e74282419a54c116afbb51a5db786Eino-Ville Talvala    status_t err = OK;
52e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
53aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev    int32_t settingsCount;
54aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev    if ((err = parcel->readInt32(&settingsCount)) != OK) {
55aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev        ALOGE("%s: Failed to read the settings count from parcel: %d", __FUNCTION__, err);
56e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin        return err;
57e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    }
58aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev
59aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev    if (settingsCount <= 0) {
60aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev        ALOGE("%s: Settings count %d should always be positive!", __FUNCTION__, settingsCount);
61aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev        return BAD_VALUE;
62aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev    }
63aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev
64aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev    for (int32_t i = 0; i < settingsCount; i++) {
65aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev        String16 id;
66aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev        if ((err = parcel->readString16(&id)) != OK) {
67aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev            ALOGE("%s: Failed to read camera id!", __FUNCTION__);
68aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev            return BAD_VALUE;
69aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev        }
70aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev
71aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev        CameraMetadata settings;
72aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev        if ((err = settings.readFromParcel(parcel)) != OK) {
73aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev            ALOGE("%s: Failed to read metadata from parcel", __FUNCTION__);
74aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev            return err;
75aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev        }
76aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev        ALOGV("%s: Read metadata from parcel", __FUNCTION__);
77aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev        mPhysicalCameraSettings.push_back({std::string(String8(id).string()), settings});
78aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev    }
79e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
804dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh    int isReprocess = 0;
814dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh    if ((err = parcel->readInt32(&isReprocess)) != OK) {
824dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh        ALOGE("%s: Failed to read reprocessing from parcel", __FUNCTION__);
834dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh        return err;
844dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh    }
854dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh    mIsReprocess = (isReprocess != 0);
864dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh
87e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    int32_t size;
88e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    if ((err = parcel->readInt32(&size)) != OK) {
89e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin        ALOGE("%s: Failed to read surface list size from parcel", __FUNCTION__);
90e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin        return err;
91e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    }
92e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    ALOGV("%s: Read surface list size = %d", __FUNCTION__, size);
93e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
94e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    // Do not distinguish null arrays from 0-sized arrays.
954dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh    for (int32_t i = 0; i < size; ++i) {
96e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin        // Parcel.writeParcelableArray
97e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin        size_t len;
98e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin        const char16_t* className = parcel->readString16Inplace(&len);
99e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin        ALOGV("%s: Read surface class = %s", __FUNCTION__,
100e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin              className != NULL ? String8(className).string() : "<null>");
101e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
102e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin        if (className == NULL) {
103e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin            continue;
104e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin        }
105e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
106e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin        // Surface.writeToParcel
10748932bbf9f1e74282419a54c116afbb51a5db786Eino-Ville Talvala        view::Surface surfaceShim;
10848932bbf9f1e74282419a54c116afbb51a5db786Eino-Ville Talvala        if ((err = surfaceShim.readFromParcel(parcel)) != OK) {
10948932bbf9f1e74282419a54c116afbb51a5db786Eino-Ville Talvala            ALOGE("%s: Failed to read output target Surface %d from parcel: %s (%d)",
11048932bbf9f1e74282419a54c116afbb51a5db786Eino-Ville Talvala                    __FUNCTION__, i, strerror(-err), err);
11148932bbf9f1e74282419a54c116afbb51a5db786Eino-Ville Talvala            return err;
11248932bbf9f1e74282419a54c116afbb51a5db786Eino-Ville Talvala        }
113e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
114e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin        sp<Surface> surface;
11548932bbf9f1e74282419a54c116afbb51a5db786Eino-Ville Talvala        if (surfaceShim.graphicBufferProducer != NULL) {
11648932bbf9f1e74282419a54c116afbb51a5db786Eino-Ville Talvala            surface = new Surface(surfaceShim.graphicBufferProducer);
117e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin        }
118e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
119e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin        mSurfaceList.push_back(surface);
120e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    }
121e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
1224dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh    int32_t streamSurfaceSize;
1234dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh    if ((err = parcel->readInt32(&streamSurfaceSize)) != OK) {
1244dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh        ALOGE("%s: Failed to read streamSurfaceSize from parcel", __FUNCTION__);
125618ff8a48a0c895a78f91f5692510c2a809425c3Chien-Yu Chen        return err;
126618ff8a48a0c895a78f91f5692510c2a809425c3Chien-Yu Chen    }
1274dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh
1284dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh    if (streamSurfaceSize < 0) {
1294dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh        ALOGE("%s: Bad streamSurfaceSize %d from parcel", __FUNCTION__, streamSurfaceSize);
1304dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh        return BAD_VALUE;
1314dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh    }
1324dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh
1334dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh    for (int32_t i = 0; i < streamSurfaceSize; ++i) {
1344dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh        int streamIdx;
1354dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh        if ((err = parcel->readInt32(&streamIdx)) != OK) {
1364dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh            ALOGE("%s: Failed to read stream index from parcel", __FUNCTION__);
1374dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh            return err;
1384dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh        }
1394dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh        mStreamIdxList.push_back(streamIdx);
1404dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh
1414dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh        int surfaceIdx;
1424dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh        if ((err = parcel->readInt32(&surfaceIdx)) != OK) {
1434dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh            ALOGE("%s: Failed to read surface index from parcel", __FUNCTION__);
1444dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh            return err;
1454dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh        }
1464dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh        mSurfaceIdxList.push_back(surfaceIdx);
1474dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh    }
148618ff8a48a0c895a78f91f5692510c2a809425c3Chien-Yu Chen
149e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    return OK;
150e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin}
151e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
152f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvalastatus_t CaptureRequest::writeToParcel(android::Parcel* parcel) const {
153e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    if (parcel == NULL) {
154e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin        ALOGE("%s: Null parcel", __FUNCTION__);
155e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin        return BAD_VALUE;
156e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    }
157e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
15848932bbf9f1e74282419a54c116afbb51a5db786Eino-Ville Talvala    status_t err = OK;
159e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
160aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev    int32_t settingsCount = static_cast<int32_t>(mPhysicalCameraSettings.size());
161aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev
162aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev    if ((err = parcel->writeInt32(settingsCount)) != OK) {
163aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev        ALOGE("%s: Failed to write settings count!", __FUNCTION__);
164e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin        return err;
165e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    }
166e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
167aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev    for (const auto &it : mPhysicalCameraSettings) {
168aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev        if ((err = parcel->writeString16(String16(it.id.c_str()))) != OK) {
169aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev            ALOGE("%s: Failed to camera id!", __FUNCTION__);
170aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev            return err;
171aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev        }
172aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev
173aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev        if ((err = it.settings.writeToParcel(parcel)) != OK) {
174aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev            ALOGE("%s: Failed to write settings!", __FUNCTION__);
175aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev            return err;
176aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev        }
177aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev    }
178aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev
1794dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh    parcel->writeInt32(mIsReprocess ? 1 : 0);
180e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
1814dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh    if (mSurfaceConverted) {
1824dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh        parcel->writeInt32(0); // 0-sized array
1834dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh    } else {
1844dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh        int32_t size = static_cast<int32_t>(mSurfaceList.size());
1854dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh
1864dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh        // Send 0-sized arrays when it's empty. Do not send null arrays.
1874dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh        parcel->writeInt32(size);
1884dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh
1894dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh        for (int32_t i = 0; i < size; ++i) {
1904dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh            // not sure if readParcelableArray does this, hard to tell from source
1914dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh            parcel->writeString16(String16("android.view.Surface"));
1924dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh
1934dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh            // Surface.writeToParcel
1944dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh            view::Surface surfaceShim;
1954dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh            surfaceShim.name = String16("unknown_name");
1964dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh            surfaceShim.graphicBufferProducer = mSurfaceList[i]->getIGraphicBufferProducer();
1974dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh            if ((err = surfaceShim.writeToParcel(parcel)) != OK) {
1984dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh                ALOGE("%s: Failed to write output target Surface %d to parcel: %s (%d)",
1994dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh                        __FUNCTION__, i, strerror(-err), err);
2004dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh                return err;
2014dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh            }
2024dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh        }
2034dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh    }
204e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
2054dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh    parcel->writeInt32(mStreamIdxList.size());
2064dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh    for (size_t i = 0; i < mStreamIdxList.size(); ++i) {
2074dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh        if ((err = parcel->writeInt32(mStreamIdxList[i])) != OK) {
2084dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh            ALOGE("%s: Failed to write stream index to parcel", __FUNCTION__);
2094dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh            return err;
2104dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh        }
2114dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh        if ((err = parcel->writeInt32(mSurfaceIdxList[i])) != OK) {
2124dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh            ALOGE("%s: Failed to write surface index to parcel", __FUNCTION__);
21348932bbf9f1e74282419a54c116afbb51a5db786Eino-Ville Talvala            return err;
21448932bbf9f1e74282419a54c116afbb51a5db786Eino-Ville Talvala        }
215e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    }
216e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    return OK;
217e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin}
218e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
219d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} // namespace camera2
220d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} // namespace hardware
221d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} // namespace android
222