1e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin/* 2e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * Copyright (C) 2013 The Android Open Source Project 3e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * 4e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * Licensed under the Apache License, Version 2.0 (the "License"); 5e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * you may not use this file except in compliance with the License. 6e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * You may obtain a copy of the License at 7e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * 8e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * http://www.apache.org/licenses/LICENSE-2.0 9e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * 10e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * Unless required by applicable law or agreed to in writing, software 11e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * distributed under the License is distributed on an "AS IS" BASIS, 12e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * See the License for the specific language governing permissions and 14e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * limitations under the License. 15e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin */ 16e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 17e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#ifndef ANDROID_HARDWARE_PHOTOGRAPHY_CAPTUREREQUEST_H 18e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#define ANDROID_HARDWARE_PHOTOGRAPHY_CAPTUREREQUEST_H 19e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 20e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#include <utils/RefBase.h> 21e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#include <utils/Vector.h> 22d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala#include <binder/Parcelable.h> 23e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#include <camera/CameraMetadata.h> 24e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 25e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkinnamespace android { 26e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 27e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkinclass Surface; 28e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 29d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalanamespace hardware { 30d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalanamespace camera2 { 31e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 32d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalastruct CaptureRequest : public Parcelable { 33032845cc878f538e3336c96e1c24668953eab971Mathias Agopian 34032845cc878f538e3336c96e1c24668953eab971Mathias Agopian // those are needed so we can use a forward declaration of Surface, otherwise 35032845cc878f538e3336c96e1c24668953eab971Mathias Agopian // the type is incomplete when the ctor/dtors are generated. This has the added 36032845cc878f538e3336c96e1c24668953eab971Mathias Agopian // benefit that ctor/dtors are not inlined, which is good because they're not trivial 37032845cc878f538e3336c96e1c24668953eab971Mathias Agopian // (because of the vtable and Vector<>) 38032845cc878f538e3336c96e1c24668953eab971Mathias Agopian CaptureRequest(); 39032845cc878f538e3336c96e1c24668953eab971Mathias Agopian CaptureRequest(const CaptureRequest& rhs); 40032845cc878f538e3336c96e1c24668953eab971Mathias Agopian CaptureRequest(CaptureRequest&& rhs) noexcept; 41032845cc878f538e3336c96e1c24668953eab971Mathias Agopian virtual ~CaptureRequest(); 42032845cc878f538e3336c96e1c24668953eab971Mathias Agopian 43aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev struct PhysicalCameraSettings { 44aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev std::string id; 45aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev CameraMetadata settings; 46aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev }; 47aebbe41461c597cdcb4be35edb5484410b9b2dffEmilian Peev std::vector<PhysicalCameraSettings> mPhysicalCameraSettings; 484dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh 494dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh // Used by NDK client to pass surfaces by stream/surface index. 504dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh bool mSurfaceConverted = false; 514dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh 524dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh // Starting in Android O, create a Surface from Parcel will take one extra 534dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh // IPC call. 54e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin Vector<sp<Surface> > mSurfaceList; 554dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh // Optional way of passing surface list since passing Surface over binder 564dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh // is expensive. Use the stream/surface index from current output configuration 574dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh // to represent an configured output Surface. When stream/surface index is used, 584dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh // set mSurfaceList to zero length to save unparcel time. 594dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh Vector<int> mStreamIdxList; 604dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh Vector<int> mSurfaceIdxList; // per stream surface list index 614dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh 62618ff8a48a0c895a78f91f5692510c2a809425c3Chien-Yu Chen bool mIsReprocess; 634dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh 64d39b9e3ec153f68b6ba81228b5aa29a9b72770b0Yin-Chia Yeh void* mContext; // arbitrary user context from NDK apps, null for java apps 65e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 66e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin /** 67e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * Keep impl up-to-date with CaptureRequest.java in frameworks/base 68e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin */ 694dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh // used by cameraserver to receive CaptureRequest from java/NDK client 70f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala status_t readFromParcel(const android::Parcel* parcel) override; 714dfa4cca7a4fcf5ea4a37dca1fef7f2f56f6dd8cYin-Chia Yeh // used by NDK client to send CaptureRequest to cameraserver 72f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala status_t writeToParcel(android::Parcel* parcel) const override; 73e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin}; 74d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 75d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} // namespace camera2 76d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} // namespace hardware 77d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 78d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalastruct CaptureRequest : 79d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala public RefBase, public hardware::camera2::CaptureRequest { 80d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala public: 81d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala // Same as android::hardware::camera2::CaptureRequest, except that you can 82d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala // put this in an sp<> 83d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala}; 84d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 85d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} // namespace android 86e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 87e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#endif 88