/* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef ANDROID_HARDWARE_PHOTOGRAPHY_CAPTUREREQUEST_H #define ANDROID_HARDWARE_PHOTOGRAPHY_CAPTUREREQUEST_H #include <utils/RefBase.h> #include <utils/Vector.h> #include <binder/Parcelable.h> #include <camera/CameraMetadata.h> namespace android { class Surface; namespace hardware { namespace camera2 { struct CaptureRequest : public Parcelable { // those are needed so we can use a forward declaration of Surface, otherwise // the type is incomplete when the ctor/dtors are generated. This has the added // benefit that ctor/dtors are not inlined, which is good because they're not trivial // (because of the vtable and Vector<>) CaptureRequest(); CaptureRequest(const CaptureRequest& rhs); CaptureRequest(CaptureRequest&& rhs) noexcept; virtual ~CaptureRequest(); struct PhysicalCameraSettings { std::string id; CameraMetadata settings; }; std::vector<PhysicalCameraSettings> mPhysicalCameraSettings; // Used by NDK client to pass surfaces by stream/surface index. bool mSurfaceConverted = false; // Starting in Android O, create a Surface from Parcel will take one extra // IPC call. Vector<sp<Surface> > mSurfaceList; // Optional way of passing surface list since passing Surface over binder // is expensive. Use the stream/surface index from current output configuration // to represent an configured output Surface. When stream/surface index is used, // set mSurfaceList to zero length to save unparcel time. Vector<int> mStreamIdxList; Vector<int> mSurfaceIdxList; // per stream surface list index bool mIsReprocess; void* mContext; // arbitrary user context from NDK apps, null for java apps /** * Keep impl up-to-date with CaptureRequest.java in frameworks/base */ // used by cameraserver to receive CaptureRequest from java/NDK client status_t readFromParcel(const android::Parcel* parcel) override; // used by NDK client to send CaptureRequest to cameraserver status_t writeToParcel(android::Parcel* parcel) const override; }; } // namespace camera2 } // namespace hardware struct CaptureRequest : public RefBase, public hardware::camera2::CaptureRequest { public: // Same as android::hardware::camera2::CaptureRequest, except that you can // put this in an sp<> }; } // namespace android #endif