/* * Copyright (C) 2017 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_CAMERA_DEVICE_V3_3_CAMERADEVICE3SESSION_H #define ANDROID_HARDWARE_CAMERA_DEVICE_V3_3_CAMERADEVICE3SESSION_H #include <android/hardware/camera/device/3.2/ICameraDevice.h> #include <android/hardware/camera/device/3.3/ICameraDeviceSession.h> #include <../../3.2/default/CameraDeviceSession.h> #include <fmq/MessageQueue.h> #include <hidl/MQDescriptor.h> #include <hidl/Status.h> #include <include/convert.h> #include <deque> #include <map> #include <unordered_map> #include "CameraMetadata.h" #include "HandleImporter.h" #include "hardware/camera3.h" #include "hardware/camera_common.h" #include "utils/Mutex.h" namespace android { namespace hardware { namespace camera { namespace device { namespace V3_3 { namespace implementation { using namespace ::android::hardware::camera::device; using ::android::hardware::camera::device::V3_2::CaptureRequest; using ::android::hardware::camera::device::V3_2::StreamConfiguration; using ::android::hardware::camera::device::V3_3::HalStreamConfiguration; using ::android::hardware::camera::device::V3_3::ICameraDeviceSession; using ::android::hardware::camera::common::V1_0::Status; using ::android::hardware::camera::common::V1_0::helper::HandleImporter; using ::android::hardware::kSynchronizedReadWrite; using ::android::hardware::MessageQueue; using ::android::hardware::MQDescriptorSync; using ::android::hardware::Return; using ::android::hardware::Void; using ::android::hardware::hidl_vec; using ::android::hardware::hidl_string; using ::android::sp; using ::android::Mutex; struct CameraDeviceSession : public V3_2::implementation::CameraDeviceSession { CameraDeviceSession(camera3_device_t*, const camera_metadata_t* deviceInfo, const sp<V3_2::ICameraDeviceCallback>&); virtual ~CameraDeviceSession(); virtual sp<V3_2::ICameraDeviceSession> getInterface() override { return new TrampolineSessionInterface_3_3(this); } protected: // Methods from v3.2 and earlier will trampoline to inherited implementation // New methods for v3.3 Return<void> configureStreams_3_3( const StreamConfiguration& requestedConfiguration, ICameraDeviceSession::configureStreams_3_3_cb _hidl_cb); private: struct TrampolineSessionInterface_3_3 : public ICameraDeviceSession { TrampolineSessionInterface_3_3(sp<CameraDeviceSession> parent) : mParent(parent) {} virtual Return<void> constructDefaultRequestSettings( V3_2::RequestTemplate type, V3_3::ICameraDeviceSession::constructDefaultRequestSettings_cb _hidl_cb) override { return mParent->constructDefaultRequestSettings(type, _hidl_cb); } virtual Return<void> configureStreams( const V3_2::StreamConfiguration& requestedConfiguration, V3_3::ICameraDeviceSession::configureStreams_cb _hidl_cb) override { return mParent->configureStreams(requestedConfiguration, _hidl_cb); } virtual Return<void> processCaptureRequest(const hidl_vec<V3_2::CaptureRequest>& requests, const hidl_vec<V3_2::BufferCache>& cachesToRemove, V3_3::ICameraDeviceSession::processCaptureRequest_cb _hidl_cb) override { return mParent->processCaptureRequest(requests, cachesToRemove, _hidl_cb); } virtual Return<void> getCaptureRequestMetadataQueue( V3_3::ICameraDeviceSession::getCaptureRequestMetadataQueue_cb _hidl_cb) override { return mParent->getCaptureRequestMetadataQueue(_hidl_cb); } virtual Return<void> getCaptureResultMetadataQueue( V3_3::ICameraDeviceSession::getCaptureResultMetadataQueue_cb _hidl_cb) override { return mParent->getCaptureResultMetadataQueue(_hidl_cb); } virtual Return<Status> flush() override { return mParent->flush(); } virtual Return<void> close() override { return mParent->close(); } virtual Return<void> configureStreams_3_3( const StreamConfiguration& requestedConfiguration, configureStreams_3_3_cb _hidl_cb) override { return mParent->configureStreams_3_3(requestedConfiguration, _hidl_cb); } private: sp<CameraDeviceSession> mParent; }; }; } // namespace implementation } // namespace V3_3 } // namespace device } // namespace camera } // namespace hardware } // namespace android #endif // ANDROID_HARDWARE_CAMERA_DEVICE_V3_3_CAMERADEVICE3SESSION_H