增加白平衡的控制

hdrplus
Matthew 11 months ago
parent 26432cee0c
commit 53c1e9c376

@ -1177,6 +1177,7 @@ bool CPhoneDevice::TakePhoto(const IDevice::PHOTO_INFO& photoInfo, const vector<
params.zoom = mPhotoInfo.zoom; params.zoom = mPhotoInfo.zoom;
params.zoomRatio = mPhotoInfo.zoomRatio; params.zoomRatio = mPhotoInfo.zoomRatio;
params.requestTemplate = mPhotoInfo.requestTemplate; params.requestTemplate = mPhotoInfo.requestTemplate;
params.awbMode = mPhotoInfo.awbMode;
params.wait3ALocked = mPhotoInfo.wait3ALocked; params.wait3ALocked = mPhotoInfo.wait3ALocked;
if (params.requestTemplate <= 0 || params.requestTemplate > 5) if (params.requestTemplate <= 0 || params.requestTemplate > 5)
{ {

@ -118,6 +118,7 @@ NdkCamera::NdkCamera(int32_t width, int32_t height, const NdkCamera::CAMERA_PARA
m_imagesCaptured = ~0; m_imagesCaptured = ~0;
afSupported = false; afSupported = false;
awbMode = ACAMERA_CONTROL_AWB_MODE_AUTO;
aeLockAvailable = false; aeLockAvailable = false;
awbLockAvailable = false; awbLockAvailable = false;
@ -275,7 +276,7 @@ int NdkCamera::open(const std::string& cameraId) {
{ {
ACameraMetadata_const_entry e = {0}; ACameraMetadata_const_entry e = {0};
camera_status_t status = ACameraMetadata_getConstEntry(camera_metadata,ACAMERA_SCALER_AVAILABLE_STREAM_CONFIGURATIONS, &e); status = ACameraMetadata_getConstEntry(camera_metadata,ACAMERA_SCALER_AVAILABLE_STREAM_CONFIGURATIONS, &e);
// format of the data: format, width, height, input?, type int32 // format of the data: format, width, height, input?, type int32
// DisplayDimension foundRes(4000, 4000); // DisplayDimension foundRes(4000, 4000);
@ -383,9 +384,9 @@ int NdkCamera::open(const std::string& cameraId) {
{ {
for (int idx = 0; idx < e.count; idx++) for (int idx = 0; idx < e.count; idx++)
{ {
if (ACAMERA_CONTROL_AWB_MODE_AUTO == e.data.u8[idx]) if (m_params.awbMode == e.data.u8[idx])
{ {
awbSupported = true; awbMode = m_params.awbMode;
break; break;
} }
// unsigned int m = e.data.u8[idx]; // unsigned int m = e.data.u8[idx];
@ -592,8 +593,8 @@ int NdkCamera::open(const std::string& cameraId) {
uint8_t edgeMode = ACAMERA_EDGE_MODE_FAST; uint8_t edgeMode = ACAMERA_EDGE_MODE_FAST;
status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_EDGE_MODE, 1, &edgeMode); status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_EDGE_MODE, 1, &edgeMode);
if (afSupported && m_params.autoFocus) { if (afSupported && m_params.autoFocus)
{
if (!m_params.zoom) if (!m_params.zoom)
{ {
if (maxRegions[2] > 0) if (maxRegions[2] > 0)
@ -715,9 +716,9 @@ int NdkCamera::open(const std::string& cameraId) {
// TODO: // TODO:
// m_imagesCaptured = 0; // m_imagesCaptured = 0;
if (awbSupported) // if (awbSupported)
{ {
uint8_t awbMode = ACAMERA_CONTROL_AWB_MODE_AUTO; // uint8_t awbMode = ACAMERA_CONTROL_AWB_MODE_AUTO;
status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AWB_MODE, 1, &awbMode); status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AWB_MODE, 1, &awbMode);
} }
@ -1214,12 +1215,17 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AF_STATE, &val); status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AF_STATE, &val);
mResult.afState = (status == ACAMERA_OK) ? *(val.data.u8) : ACAMERA_CONTROL_AF_STATE_INACTIVE; mResult.afState = (status == ACAMERA_OK) ? *(val.data.u8) : ACAMERA_CONTROL_AF_STATE_INACTIVE;
ALOGW("3ASTATE: ae=%u awb=%u af=%u", (uint32_t)mResult.aeState, (uint32_t)mResult.awbState, (uint32_t)mResult.afState); val = { 0 };
status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AWB_MODE, &val);
mResult.awbMode = (status == ACAMERA_OK) ? *(val.data.u8) : ACAMERA_CONTROL_AWB_MODE_OFF;
ALOGW("3ASTATE: AES=%u AWBS=%u AFS=%u", (uint32_t)mResult.aeState, (uint32_t)mResult.awbState, (uint32_t)mResult.afState);
if (awbSupported && awbLockAvailable && mResult.awbState == ACAMERA_CONTROL_AWB_STATE_CONVERGED) if ((mResult.awbMode == ACAMERA_CONTROL_AWB_MODE_AUTO) && awbLockAvailable && !mResult.awbLockSetted && mResult.awbState == ACAMERA_CONTROL_AWB_STATE_CONVERGED)
{ {
uint8_t awbLock = ACAMERA_CONTROL_AWB_LOCK_ON; uint8_t awbLock = ACAMERA_CONTROL_AWB_LOCK_ON;
status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AWB_LOCK, 1, &awbLock); status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AWB_LOCK, 1, &awbLock);
mResult.awbLockSetted = 1;
} }
if (m_params.autoExposure != 0) if (m_params.autoExposure != 0)
@ -1230,10 +1236,11 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger); status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger);
} }
if (aeLockAvailable && (mResult.aeState == ACAMERA_CONTROL_AE_STATE_CONVERGED || mResult.aeState == ACAMERA_CONTROL_AE_STATE_FLASH_REQUIRED)) if (aeLockAvailable && !mResult.aeLockSetted && (mResult.aeState == ACAMERA_CONTROL_AE_STATE_CONVERGED || mResult.aeState == ACAMERA_CONTROL_AE_STATE_FLASH_REQUIRED))
{ {
uint8_t aeLock = ACAMERA_CONTROL_AE_LOCK_ON; uint8_t aeLock = ACAMERA_CONTROL_AE_LOCK_ON;
status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_LOCK, 1,&aeLock); status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_LOCK, 1,&aeLock);
mResult.aeLockSetted = 1;
} }
} }
@ -1267,7 +1274,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
} }
else else
{ {
if (awbSupported) if (awbMode == ACAMERA_CONTROL_AWB_MODE_AUTO)
{ {
if (m_params.wait3ALocked) if (m_params.wait3ALocked)
{ {
@ -1278,7 +1285,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
} }
else else
{ {
if (mResult.awbState != ACAMERA_CONTROL_AWB_STATE_CONVERGED) if (mResult.awbState != ACAMERA_CONTROL_AWB_STATE_CONVERGED && mResult.awbState != ACAMERA_CONTROL_AWB_STATE_LOCKED)
{ {
return; return;
} }
@ -1296,7 +1303,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
} }
else else
{ {
if (mResult.aeState != ACAMERA_CONTROL_AE_STATE_CONVERGED && mResult.aeState != ACAMERA_CONTROL_AE_STATE_FLASH_REQUIRED) if (mResult.aeState != ACAMERA_CONTROL_AE_STATE_CONVERGED && mResult.aeState != ACAMERA_CONTROL_AE_STATE_FLASH_REQUIRED && mResult.aeState != ACAMERA_CONTROL_AE_STATE_LOCKED)
{ {
return; return;
} }

@ -82,6 +82,7 @@ public:
int compensation; int compensation;
float zoomRatio; float zoomRatio;
uint8_t requestTemplate; uint8_t requestTemplate;
uint8_t awbMode;
}; };
@ -97,9 +98,14 @@ public:
int32_t sensitivity; int32_t sensitivity;
int32_t compensation; int32_t compensation;
uint8_t sceneMode; uint8_t sceneMode;
uint8_t awbMode;
float zoomRatio; float zoomRatio;
uint8_t avgY; uint8_t avgY;
uint64_t duration; uint64_t duration;
uint8_t awbLockSetted : 1;
uint8_t aeLockSetted : 1;
uint8_t afLockSetted : 1;
}; };
NdkCamera(int32_t width, int32_t height, const CAMERA_PARAMS& params); NdkCamera(int32_t width, int32_t height, const CAMERA_PARAMS& params);
@ -145,7 +151,7 @@ protected:
bool sceneModeSupported; bool sceneModeSupported;
bool afSupported; bool afSupported;
bool awbSupported; uint8_t awbMode;
bool aeLockAvailable; bool aeLockAvailable;
bool awbLockAvailable; bool awbLockAvailable;

Loading…
Cancel
Save