/*
* 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