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

Commit a66ea4b9 authored by Jayant Chowdhary's avatar Jayant Chowdhary Committed by Android (Google) Code Review
Browse files

Merge "camera2 vndk: Add ACameraMananger_getTagFromName." into qt-dev

parents e069424f b16194d5
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -64,6 +64,10 @@ cc_library_shared {
        "-Wextra",
        "-Werror",
    ],
    // TODO: jchowdhary@, use header_libs instead b/131165718
    include_dirs: [
        "system/media/private/camera/include",
    ],
    export_include_dirs: ["include"],
    export_shared_lib_headers: [
        "libnativewindow",
@@ -123,6 +127,10 @@ cc_library_shared {
        "android.hardware.camera.common@1.0-helper",
        "libarect",
    ],
    // TODO: jchowdhary@, use header_libs instead b/131165718
    include_dirs: [
        "system/media/private/camera/include",
    ],
    product_variables: {
        pdk: {
            enabled: false,
+14 −0
Original line number Diff line number Diff line
@@ -190,3 +190,17 @@ camera_status_t ACameraManager_openCamera(
    }
    return mgr->openCamera(cameraId, callback, device);
}

#ifdef __ANDROID_VNDK__
EXPORT
camera_status_t ACameraManager_getTagFromName(ACameraManager *mgr, const char* cameraId,
        const char *name, /*out*/uint32_t *tag) {
    ATRACE_CALL();
    if (mgr == nullptr || cameraId == nullptr || name == nullptr) {
        ALOGE("%s: invalid argument! mgr %p cameraId %p name %p",
                __FUNCTION__, mgr, cameraId, name);
        return ACAMERA_ERROR_INVALID_PARAMETER;
    }
    return mgr->getTagFromName(cameraId, name, tag);
}
#endif
+17 −0
Original line number Diff line number Diff line
@@ -374,6 +374,23 @@ camera_status_t ACameraManager_unregisterExtendedAvailabilityCallback(
        ACameraManager* manager,
        const ACameraManager_ExtendedAvailabilityCallbacks* callback) __INTRODUCED_IN(29);

#ifdef __ANDROID_VNDK__
/**
 * Retrieve the tag value, given the tag name and camera id.
 * This method is device specific since some metadata might be defined by device manufacturers
 * and might only be accessible for specific cameras.
 * @param manager The {@link ACameraManager} of interest.
 * @param cameraId The cameraId, which is used to query camera characteristics.
 * @param name The name of the tag being queried.
 * @param tag The output tag assigned by this method.
 *
 * @return ACAMERA_OK only if the function call was successful.
 */
camera_status_t ACameraManager_getTagFromName(ACameraManager *manager, const char* cameraId,
        const char *name, /*out*/uint32_t *tag)
        __INTRODUCED_IN(29);
#endif

#endif /* __ANDROID_API__ >= 29 */

__END_DECLS
+22 −0
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@
#include "ACameraMetadata.h"
#include "ndk_vendor/impl/ACameraDevice.h"
#include "utils.h"
#include <CameraMetadata.h>
#include <camera_metadata_hidden.h>

#include <utils/Vector.h>
#include <cutils/properties.h>
@@ -587,6 +589,26 @@ ACameraManager::openCamera(
    return ACAMERA_OK;
}

camera_status_t
ACameraManager::getTagFromName(const char *cameraId, const char *name, uint32_t *tag) {
    sp<ACameraMetadata> rawChars;
    camera_status_t ret = getCameraCharacteristics(cameraId, &rawChars);
    if (ret != ACAMERA_OK) {
        ALOGE("%s, Cannot retrieve camera characteristics for camera id %s", __FUNCTION__,
                cameraId);
        return ACAMERA_ERROR_METADATA_NOT_FOUND;
    }
    const CameraMetadata& metadata = rawChars->getInternalData();
    const camera_metadata_t *rawMetadata = metadata.getAndLock();
    metadata_vendor_id_t vendorTagId = get_camera_metadata_vendor_id(rawMetadata);
    metadata.unlock(rawMetadata);
    sp<VendorTagDescriptorCache> vtCache = VendorTagDescriptorCache::getGlobalVendorTagCache();
    sp<VendorTagDescriptor> vTags = nullptr;
    vtCache->getVendorTagDescriptor(vendorTagId, &vTags);
    status_t status= metadata.getTagFromName(name, vTags.get(), tag);
    return status == OK ? ACAMERA_OK : ACAMERA_ERROR_METADATA_NOT_FOUND;
}

ACameraManager::~ACameraManager() {

}
+1 −0
Original line number Diff line number Diff line
@@ -204,6 +204,7 @@ struct ACameraManager {
    camera_status_t openCamera(const char* cameraId,
                               ACameraDevice_StateCallbacks* callback,
                               /*out*/ACameraDevice** device);
    camera_status_t getTagFromName(const char *cameraId, const char *name, uint32_t *tag);

  private:
    enum {
Loading