Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 68e2566e authored by Shuzhen Wang's avatar Shuzhen Wang Committed by Android (Google) Code Review
Browse files

Merge "Camera: Add VNDK version filter for capture requests in CameraDeviceUser" into udc-dev

parents c0ffdc0f 0dabcbb1
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
#include "AidlCameraDeviceUser.h"
#include <aidl/AidlUtils.h>
#include <aidl/android/frameworks/cameraservice/device/CaptureMetadataInfo.h>
#include <android-base/properties.h>

namespace android::frameworks::cameraservice::device::implementation {

@@ -35,7 +36,7 @@ using ::android::hardware::cameraservice::utils::conversion::aidl::cloneFromAidl
using ::android::hardware::cameraservice::utils::conversion::aidl::cloneToAidl;
using ::android::hardware::cameraservice::utils::conversion::aidl::convertFromAidl;
using ::android::hardware::cameraservice::utils::conversion::aidl::convertToAidl;
using ::android::hardware::cameraservice::utils::conversion::aidl::convertToAidl;
using ::android::hardware::cameraservice::utils::conversion::aidl::filterVndkKeys;
using ::ndk::ScopedAStatus;

namespace {
@@ -55,6 +56,7 @@ inline ScopedAStatus fromUStatus(const UStatus& status) {
AidlCameraDeviceUser::AidlCameraDeviceUser(const sp<UICameraDeviceUser>& deviceRemote):
      mDeviceRemote(deviceRemote) {
    mInitSuccess = initDevice();
    mVndkVersion = base::GetIntProperty("ro.vndk.version", __ANDROID_API_FUTURE__);
}

bool AidlCameraDeviceUser::initDevice() {
@@ -171,6 +173,13 @@ ndk::ScopedAStatus AidlCameraDeviceUser::createDefaultRequest(STemplateId in_tem
        ALOGE("%s: Failed to create default request: %s", __FUNCTION__, ret.toString8().string());
        return fromUStatus(ret);
    }

    if (filterVndkKeys(mVndkVersion, metadata, /*isStatic*/false) != OK) {
        ALOGE("%s: Unable to filter vndk metadata keys for version %d",
              __FUNCTION__, mVndkVersion);
        return fromSStatus(SStatus::UNKNOWN_ERROR);
    }

    const camera_metadata_t* rawMetadata = metadata.getAndLock();
    cloneToAidl(rawMetadata, _aidl_return);
    metadata.unlock(rawMetadata);
+1 −0
Original line number Diff line number Diff line
@@ -109,6 +109,7 @@ class AidlCameraDeviceUser final : public SBnCameraDeviceUser {
    std::shared_ptr<CaptureResultMetadataQueue> mCaptureResultMetadataQueue = nullptr;
    bool mInitSuccess = false;
    int32_t mRequestId = REQUEST_ID_NONE;
    int mVndkVersion = -1;
};

} // namespace android::frameworks::cameraservice::device::implementation
+13 −1
Original line number Diff line number Diff line
@@ -19,10 +19,12 @@
#include <gui/Surface.h>
#include <gui/bufferqueue/1.0/H2BGraphicBufferProducer.h>

#include <aidl/AidlUtils.h>
#include <hidl/AidlCameraDeviceCallbacks.h>
#include <hidl/HidlCameraDeviceUser.h>
#include <hidl/Utils.h>
#include <android/hardware/camera/device/3.2/types.h>
#include <android-base/properties.h>

namespace android {
namespace frameworks {
@@ -31,6 +33,7 @@ namespace device {
namespace V2_1 {
namespace implementation {

using hardware::cameraservice::utils::conversion::aidl::filterVndkKeys;
using hardware::cameraservice::utils::conversion::convertToHidl;
using hardware::cameraservice::utils::conversion::convertFromHidl;
using hardware::cameraservice::utils::conversion::B2HStatus;
@@ -55,6 +58,7 @@ HidlCameraDeviceUser::HidlCameraDeviceUser(
    const sp<hardware::camera2::ICameraDeviceUser> &deviceRemote)
  : mDeviceRemote(deviceRemote) {
    mInitSuccess = initDevice();
    mVndkVersion = base::GetIntProperty("ro.vndk.version", __ANDROID_API_FUTURE__);
}

bool HidlCameraDeviceUser::initDevice() {
@@ -235,8 +239,16 @@ Return<void> HidlCameraDeviceUser::createDefaultRequest(TemplateId templateId,
    android::CameraMetadata cameraMetadata;
    binder::Status ret = mDeviceRemote->createDefaultRequest(convertFromHidl(templateId),
                                                             &cameraMetadata);
    HStatus hStatus = B2HStatus(ret);

    HCameraMetadata hidlMetadata;
    if (filterVndkKeys(mVndkVersion, cameraMetadata, /*isStatic*/false) != OK) {
        ALOGE("%s: Unable to filter vndk metadata keys for version %d",
              __FUNCTION__, mVndkVersion);
        _hidl_cb(HStatus::UNKNOWN_ERROR, hidlMetadata);
        return Void();
    }

    HStatus hStatus = B2HStatus(ret);
    const camera_metadata_t *rawMetadata = cameraMetadata.getAndLock();
    convertToHidl(rawMetadata, &hidlMetadata);
    _hidl_cb(hStatus, hidlMetadata);
+1 −0
Original line number Diff line number Diff line
@@ -127,6 +127,7 @@ struct HidlCameraDeviceUser final : public HCameraDeviceUser {
    std::shared_ptr<CaptureResultMetadataQueue> mCaptureResultMetadataQueue = nullptr;
    bool mInitSuccess = false;
    int32_t mRequestId = REQUEST_ID_NONE;
    int mVndkVersion = -1;
};

} // implementation