NDK API code demo

    camera_status_t camera_ae_status = ACAMERA_OK;
    uint8_t aeModeOff = ACAMERA_CONTROL_AE_MODE_OFF;
    uint8_t afModeOff = ACAMERA_CONTROL_AF_MODE_OFF;
    uint8_t awbModeOff = ACAMERA_CONTROL_AWB_MODE_OFF;
    LOG_ERROR("NativeCamera_setExposureValue--exposureValue= %d\n",exposureValue);
    if(NCamera->captureRequest != NULL){
        ACaptureRequest_setEntry_u8(NCamera->captureRequest, ACAMERA_CONTROL_AF_MODE,1, &afModeOff);
        ACaptureRequest_setEntry_u8(NCamera->captureRequest, ACAMERA_CONTROL_AWB_MODE,1, &awbModeOff);
        ACaptureRequest_setEntry_u8(NCamera->captureRequest, ACAMERA_CONTROL_AE_MODE,1, &aeModeOff);

        camera_ae_status = ACaptureRequest_setEntry_i64(NCamera->captureRequest, ACAMERA_SENSOR_EXPOSURE_TIME,1, &exposureValue);//zzz

        if(camera_ae_status != ACAMERA_OK){
            LOG_ERROR("Failed to setExposureValue\n");
        }
    }
#include "cam_utils.h"
#include "log.h"
#include <media/NdkImageReader.h>

namespace sixo {

void printCamProps(ACameraManager *cameraManager, const char *id)
{
    // exposure range
    ACameraMetadata *metadataObj;
    ACameraManager_getCameraCharacteristics(cameraManager, id, &metadataObj);

    ACameraMetadata_const_entry entry = {0};
    ACameraMetadata_getConstEntry(metadataObj,
                                  ACAMERA_SENSOR_INFO_EXPOSURE_TIME_RANGE, &entry);

    int64_t minExposure = entry.data.i64[0];
    int64_t maxExposure = entry.data.i64[1];
    LOGD("camProps: minExposure=%lld vs maxExposure=%lld", minExposure, maxExposure);
    

    // sensitivity
    ACameraMetadata_getConstEntry(metadataObj,
                                  ACAMERA_SENSOR_INFO_SENSITIVITY_RANGE, &entry);

    int32_t minSensitivity = entry.data.i32[0];
    int32_t maxSensitivity = entry.data.i32[1];

    LOGD("camProps: minSensitivity=%d vs maxSensitivity=%d", minSensitivity, maxSensitivity);
    

    // JPEG format
    ACameraMetadata_getConstEntry(metadataObj,
                                  ACAMERA_SCALER_AVAILABLE_STREAM_CONFIGURATIONS, &entry);

    for (int i = 0; i < entry.count; i += 4)
    {
        // We are only interested in output streams, so skip input stream
        int32_t input = entry.data.i32[i + 3];
        if (input)
            continue;

        int32_t format = entry.data.i32[i + 0];
        if (format == AIMAGE_FORMAT_JPEG)
        {
            int32_t width = entry.data.i32[i + 1];
            int32_t height = entry.data.i32[i + 2];
            LOGD("camProps: maxWidth=%d vs maxHeight=%d", width, height);
        }
    }

    // cam facing
    ACameraMetadata_getConstEntry(metadataObj,
                                  ACAMERA_SENSOR_ORIENTATION, &entry);

    int32_t orientation = entry.data.i32[0];
    LOGD("camProps: %d", orientation);
}


std::string getBackFacingCamId(ACameraManager *cameraManager)
{
    ACameraIdList *cameraIds = nullptr;
    ACameraManager_getCameraIdList(cameraManager, &cameraIds);

    std::string backId;

    LOGD("found camera count %d", cameraIds->numCameras);

    for (int i = 0; i < cameraIds->numCameras; ++i)
    {
        const char *id = cameraIds->cameraIds[i];

        ACameraMetadata *metadataObj;
        ACameraManager_getCameraCharacteristics(cameraManager, id, &metadataObj);

        ACameraMetadata_const_entry lensInfo = {0};
        ACameraMetadata_getConstEntry(metadataObj, ACAMERA_LENS_FACING, &lensInfo);

        auto facing = static_cast<acamera_metadata_enum_android_lens_facing_t>(
                lensInfo.data.u8[0]);

        // Found a back-facing camera?
        if (facing == ACAMERA_LENS_FACING_BACK)
        {
            backId = id;
            break;
        }
    }

    ACameraManager_deleteCameraIdList(cameraIds);

    return backId;
}
}

参考:​​​​​​​​​​​​​​https://github.com/sixo/native-camera/blob/master/app/src/main/cpp/cam_utils.cpp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值