Loading camera/Android.bp +2 −1 Original line number Original line Diff line number Diff line Loading @@ -40,6 +40,7 @@ cc_library_shared { "ICameraRecordingProxy.cpp", "ICameraRecordingProxy.cpp", "ICameraRecordingProxyListener.cpp", "ICameraRecordingProxyListener.cpp", "camera2/CaptureRequest.cpp", "camera2/CaptureRequest.cpp", "camera2/ConcurrentCamera.cpp", "camera2/OutputConfiguration.cpp", "camera2/OutputConfiguration.cpp", "camera2/SessionConfiguration.cpp", "camera2/SessionConfiguration.cpp", "camera2/SubmitInfo.cpp", "camera2/SubmitInfo.cpp", Loading @@ -66,7 +67,7 @@ cc_library_shared { "include", "include", "include/camera" "include/camera" ], ], export_shared_lib_headers: ["libcamera_metadata"], export_shared_lib_headers: ["libcamera_metadata", "libnativewindow", "libgui"], cflags: [ cflags: [ "-Werror", "-Werror", Loading camera/aidl/android/hardware/ICameraService.aidl +21 −0 Original line number Original line Diff line number Diff line Loading @@ -22,6 +22,8 @@ import android.hardware.camera2.ICameraDeviceUser; import android.hardware.camera2.ICameraDeviceCallbacks; import android.hardware.camera2.ICameraDeviceCallbacks; import android.hardware.camera2.params.VendorTagDescriptor; import android.hardware.camera2.params.VendorTagDescriptor; import android.hardware.camera2.params.VendorTagDescriptorCache; import android.hardware.camera2.params.VendorTagDescriptorCache; import android.hardware.camera2.utils.ConcurrentCameraIdCombination; import android.hardware.camera2.utils.CameraIdAndSessionConfiguration; import android.hardware.camera2.impl.CameraMetadataNative; import android.hardware.camera2.impl.CameraMetadataNative; import android.hardware.ICameraServiceListener; import android.hardware.ICameraServiceListener; import android.hardware.CameraInfo; import android.hardware.CameraInfo; Loading Loading @@ -113,6 +115,25 @@ interface ICameraService */ */ CameraStatus[] addListener(ICameraServiceListener listener); CameraStatus[] addListener(ICameraServiceListener listener); /** * Get a list of combinations of camera ids which support concurrent streaming. * */ ConcurrentCameraIdCombination[] getConcurrentStreamingCameraIds(); /** * Check whether a particular set of session configurations are concurrently supported by the * corresponding camera ids. * * @param sessions the set of camera id and session configuration pairs to be queried. * @return true - the set of concurrent camera id and stream combinations is supported. * false - the set of concurrent camera id and stream combinations is not supported * OR the method was called with a set of camera ids not returned by * getConcurrentMultiStreamingCameraIds(). */ boolean isConcurrentSessionConfigurationSupported( in CameraIdAndSessionConfiguration[] sessions); /** /** * Remove listener for changes to camera device and flashlight state. * Remove listener for changes to camera device and flashlight state. */ */ Loading camera/aidl/android/hardware/camera2/utils/CameraIdAndSessionConfiguration.aidl 0 → 100644 +20 −0 Original line number Original line Diff line number Diff line /* * Copyright (C) 2020 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. */ package android.hardware.camera2.utils; /** @hide */ parcelable CameraIdAndSessionConfiguration cpp_header "camera/camera2/ConcurrentCamera.h"; camera/aidl/android/hardware/camera2/utils/ConcurrentCameraIdCombination.aidl 0 → 100644 +20 −0 Original line number Original line Diff line number Diff line /* * Copyright (C) 2020 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. */ package android.hardware.camera2.utils; /** @hide */ parcelable ConcurrentCameraIdCombination cpp_header "camera/camera2/ConcurrentCamera.h"; camera/camera2/ConcurrentCamera.cpp 0 → 100644 +129 −0 Original line number Original line Diff line number Diff line /* * Copyright (C) 2020 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. */ // #define LOG_NDEBUG 0 #define LOG_TAG "ConcurrentCamera" #include <utils/Log.h> #include <utils/String16.h> #include <camera/camera2/ConcurrentCamera.h> #include <binder/Parcel.h> namespace android { namespace hardware { namespace camera2 { namespace utils { ConcurrentCameraIdCombination::ConcurrentCameraIdCombination() = default; ConcurrentCameraIdCombination::ConcurrentCameraIdCombination( std::vector<std::string> &&combination) : mConcurrentCameraIds(std::move(combination)) { } ConcurrentCameraIdCombination::~ConcurrentCameraIdCombination() = default; status_t ConcurrentCameraIdCombination::readFromParcel(const android::Parcel* parcel) { if (parcel == nullptr) { ALOGE("%s: Null parcel", __FUNCTION__); return BAD_VALUE; } status_t err = OK; mConcurrentCameraIds.clear(); int32_t cameraIdCount = 0; if ((err = parcel->readInt32(&cameraIdCount)) != OK) { ALOGE("%s: Failed to read the camera id count from parcel: %d", __FUNCTION__, err); return err; } for (int32_t i = 0; i < cameraIdCount; i++) { String16 id; if ((err = parcel->readString16(&id)) != OK) { ALOGE("%s: Failed to read camera id!", __FUNCTION__); return err; } mConcurrentCameraIds.push_back(std::string(String8(id).string())); } return OK; } status_t ConcurrentCameraIdCombination::writeToParcel(android::Parcel* parcel) const { if (parcel == nullptr) { ALOGE("%s: Null parcel", __FUNCTION__); return BAD_VALUE; } status_t err = OK; if ((err = parcel->writeInt32(mConcurrentCameraIds.size())) != OK) { ALOGE("%s: Failed to write the camera id count to parcel: %d", __FUNCTION__, err); return err; } for (const auto &it : mConcurrentCameraIds) { if ((err = parcel->writeString16(String16(it.c_str()))) != OK) { ALOGE("%s: Failed to write the camera id string to parcel: %d", __FUNCTION__, err); return err; } } return OK; } CameraIdAndSessionConfiguration::CameraIdAndSessionConfiguration() = default; CameraIdAndSessionConfiguration::~CameraIdAndSessionConfiguration() = default; status_t CameraIdAndSessionConfiguration::readFromParcel(const android::Parcel* parcel) { if (parcel == nullptr) { ALOGE("%s: Null parcel", __FUNCTION__); return BAD_VALUE; } status_t err = OK; String16 id; if ((err = parcel->readString16(&id)) != OK) { ALOGE("%s: Failed to read camera id!", __FUNCTION__); return err; } if ((err = mSessionConfiguration.readFromParcel(parcel)) != OK) { ALOGE("%s: Failed to read sessionConfiguration!", __FUNCTION__); return err; } mCameraId = std::string(String8(id).string()); return OK; } status_t CameraIdAndSessionConfiguration::writeToParcel(android::Parcel* parcel) const { if (parcel == nullptr) { ALOGE("%s: Null parcel", __FUNCTION__); return BAD_VALUE; } status_t err = OK; if ((err = parcel->writeString16(String16(mCameraId.c_str()))) != OK) { ALOGE("%s: Failed to write camera id!", __FUNCTION__); return err; } if ((err = mSessionConfiguration.writeToParcel(parcel) != OK)) { ALOGE("%s: Failed to write session configuration!", __FUNCTION__); return err; } return OK; } } // namespace utils } // namespace camera2 } // namespace hardware } // namespace android Loading
camera/Android.bp +2 −1 Original line number Original line Diff line number Diff line Loading @@ -40,6 +40,7 @@ cc_library_shared { "ICameraRecordingProxy.cpp", "ICameraRecordingProxy.cpp", "ICameraRecordingProxyListener.cpp", "ICameraRecordingProxyListener.cpp", "camera2/CaptureRequest.cpp", "camera2/CaptureRequest.cpp", "camera2/ConcurrentCamera.cpp", "camera2/OutputConfiguration.cpp", "camera2/OutputConfiguration.cpp", "camera2/SessionConfiguration.cpp", "camera2/SessionConfiguration.cpp", "camera2/SubmitInfo.cpp", "camera2/SubmitInfo.cpp", Loading @@ -66,7 +67,7 @@ cc_library_shared { "include", "include", "include/camera" "include/camera" ], ], export_shared_lib_headers: ["libcamera_metadata"], export_shared_lib_headers: ["libcamera_metadata", "libnativewindow", "libgui"], cflags: [ cflags: [ "-Werror", "-Werror", Loading
camera/aidl/android/hardware/ICameraService.aidl +21 −0 Original line number Original line Diff line number Diff line Loading @@ -22,6 +22,8 @@ import android.hardware.camera2.ICameraDeviceUser; import android.hardware.camera2.ICameraDeviceCallbacks; import android.hardware.camera2.ICameraDeviceCallbacks; import android.hardware.camera2.params.VendorTagDescriptor; import android.hardware.camera2.params.VendorTagDescriptor; import android.hardware.camera2.params.VendorTagDescriptorCache; import android.hardware.camera2.params.VendorTagDescriptorCache; import android.hardware.camera2.utils.ConcurrentCameraIdCombination; import android.hardware.camera2.utils.CameraIdAndSessionConfiguration; import android.hardware.camera2.impl.CameraMetadataNative; import android.hardware.camera2.impl.CameraMetadataNative; import android.hardware.ICameraServiceListener; import android.hardware.ICameraServiceListener; import android.hardware.CameraInfo; import android.hardware.CameraInfo; Loading Loading @@ -113,6 +115,25 @@ interface ICameraService */ */ CameraStatus[] addListener(ICameraServiceListener listener); CameraStatus[] addListener(ICameraServiceListener listener); /** * Get a list of combinations of camera ids which support concurrent streaming. * */ ConcurrentCameraIdCombination[] getConcurrentStreamingCameraIds(); /** * Check whether a particular set of session configurations are concurrently supported by the * corresponding camera ids. * * @param sessions the set of camera id and session configuration pairs to be queried. * @return true - the set of concurrent camera id and stream combinations is supported. * false - the set of concurrent camera id and stream combinations is not supported * OR the method was called with a set of camera ids not returned by * getConcurrentMultiStreamingCameraIds(). */ boolean isConcurrentSessionConfigurationSupported( in CameraIdAndSessionConfiguration[] sessions); /** /** * Remove listener for changes to camera device and flashlight state. * Remove listener for changes to camera device and flashlight state. */ */ Loading
camera/aidl/android/hardware/camera2/utils/CameraIdAndSessionConfiguration.aidl 0 → 100644 +20 −0 Original line number Original line Diff line number Diff line /* * Copyright (C) 2020 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. */ package android.hardware.camera2.utils; /** @hide */ parcelable CameraIdAndSessionConfiguration cpp_header "camera/camera2/ConcurrentCamera.h";
camera/aidl/android/hardware/camera2/utils/ConcurrentCameraIdCombination.aidl 0 → 100644 +20 −0 Original line number Original line Diff line number Diff line /* * Copyright (C) 2020 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. */ package android.hardware.camera2.utils; /** @hide */ parcelable ConcurrentCameraIdCombination cpp_header "camera/camera2/ConcurrentCamera.h";
camera/camera2/ConcurrentCamera.cpp 0 → 100644 +129 −0 Original line number Original line Diff line number Diff line /* * Copyright (C) 2020 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. */ // #define LOG_NDEBUG 0 #define LOG_TAG "ConcurrentCamera" #include <utils/Log.h> #include <utils/String16.h> #include <camera/camera2/ConcurrentCamera.h> #include <binder/Parcel.h> namespace android { namespace hardware { namespace camera2 { namespace utils { ConcurrentCameraIdCombination::ConcurrentCameraIdCombination() = default; ConcurrentCameraIdCombination::ConcurrentCameraIdCombination( std::vector<std::string> &&combination) : mConcurrentCameraIds(std::move(combination)) { } ConcurrentCameraIdCombination::~ConcurrentCameraIdCombination() = default; status_t ConcurrentCameraIdCombination::readFromParcel(const android::Parcel* parcel) { if (parcel == nullptr) { ALOGE("%s: Null parcel", __FUNCTION__); return BAD_VALUE; } status_t err = OK; mConcurrentCameraIds.clear(); int32_t cameraIdCount = 0; if ((err = parcel->readInt32(&cameraIdCount)) != OK) { ALOGE("%s: Failed to read the camera id count from parcel: %d", __FUNCTION__, err); return err; } for (int32_t i = 0; i < cameraIdCount; i++) { String16 id; if ((err = parcel->readString16(&id)) != OK) { ALOGE("%s: Failed to read camera id!", __FUNCTION__); return err; } mConcurrentCameraIds.push_back(std::string(String8(id).string())); } return OK; } status_t ConcurrentCameraIdCombination::writeToParcel(android::Parcel* parcel) const { if (parcel == nullptr) { ALOGE("%s: Null parcel", __FUNCTION__); return BAD_VALUE; } status_t err = OK; if ((err = parcel->writeInt32(mConcurrentCameraIds.size())) != OK) { ALOGE("%s: Failed to write the camera id count to parcel: %d", __FUNCTION__, err); return err; } for (const auto &it : mConcurrentCameraIds) { if ((err = parcel->writeString16(String16(it.c_str()))) != OK) { ALOGE("%s: Failed to write the camera id string to parcel: %d", __FUNCTION__, err); return err; } } return OK; } CameraIdAndSessionConfiguration::CameraIdAndSessionConfiguration() = default; CameraIdAndSessionConfiguration::~CameraIdAndSessionConfiguration() = default; status_t CameraIdAndSessionConfiguration::readFromParcel(const android::Parcel* parcel) { if (parcel == nullptr) { ALOGE("%s: Null parcel", __FUNCTION__); return BAD_VALUE; } status_t err = OK; String16 id; if ((err = parcel->readString16(&id)) != OK) { ALOGE("%s: Failed to read camera id!", __FUNCTION__); return err; } if ((err = mSessionConfiguration.readFromParcel(parcel)) != OK) { ALOGE("%s: Failed to read sessionConfiguration!", __FUNCTION__); return err; } mCameraId = std::string(String8(id).string()); return OK; } status_t CameraIdAndSessionConfiguration::writeToParcel(android::Parcel* parcel) const { if (parcel == nullptr) { ALOGE("%s: Null parcel", __FUNCTION__); return BAD_VALUE; } status_t err = OK; if ((err = parcel->writeString16(String16(mCameraId.c_str()))) != OK) { ALOGE("%s: Failed to write camera id!", __FUNCTION__); return err; } if ((err = mSessionConfiguration.writeToParcel(parcel) != OK)) { ALOGE("%s: Failed to write session configuration!", __FUNCTION__); return err; } return OK; } } // namespace utils } // namespace camera2 } // namespace hardware } // namespace android