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