@ -293,7 +293,7 @@ int NdkCamera::open(const std::string& cameraId) {
if ( format = = AIMAGE_FORMAT_YUV_420_888 /* || format == AIMAGE_FORMAT_JPEG*/ )
if ( format = = AIMAGE_FORMAT_YUV_420_888 /* || format == AIMAGE_FORMAT_JPEG*/ )
{
{
DisplayDimension res ( e . data . i32 [ i + 1 ] , e . data . i32 [ i + 2 ] ) ;
DisplayDimension res ( e . data . i32 [ i + 1 ] , e . data . i32 [ i + 2 ] ) ;
XYLOG ( XYLOG_SEVERITY_DEBUG , " CameraId=%s CX=%d CY=%d " , cameraId . c_str ( ) , res . width ( ) , res . height ( ) ) ;
// XYLOG(XYLOG_SEVERITY_DEBUG, "CameraId=%s CX=%d CY=%d", cameraId.c_str(), res.width(), res.height());
if ( ! disp . IsSameRatio ( res ) )
if ( ! disp . IsSameRatio ( res ) )
{
{
@ -373,6 +373,26 @@ int NdkCamera::open(const std::string& cameraId) {
afSupported = ( status = = ACAMERA_OK ) & & ! ( e . count = = 0 | | ( e . count = = 1 & & e . data . u8 [ 0 ] = = ACAMERA_CONTROL_AF_MODE_OFF ) ) ;
afSupported = ( status = = ACAMERA_OK ) & & ! ( e . count = = 0 | | ( e . count = = 1 & & e . data . u8 [ 0 ] = = ACAMERA_CONTROL_AF_MODE_OFF ) ) ;
}
}
{
ACameraMetadata_const_entry e = { 0 } ;
status = ACameraMetadata_getConstEntry ( camera_metadata , ACAMERA_CONTROL_AWB_AVAILABLE_MODES , & e ) ;
// AASSERT(status == ACAMERA_OK, "ACameraMetadata_getConstEntry::ACAMERA_CONTROL_AF_AVAILABLE_MODES return error, %d", status);
if ( status = = ACAMERA_OK )
{
for ( int idx = 0 ; idx < e . count ; idx + + )
{
if ( ACAMERA_CONTROL_AWB_MODE_AUTO = = e . data . u8 [ idx ] )
{
awbSupported = true ;
break ;
}
// unsigned int m = e.data.u8[idx];
// XYLOG(XYLOG_SEVERITY_DEBUG, "Available AWB Mode %u", m);
}
}
// awbSupported = (status == ACAMERA_OK) && !(e.count == 0 || (e.count == 1 && e.data.u8[0] == ACAMERA_CONTROL_AWB_MODE_OFF));
}
if ( ! afSupported )
if ( ! afSupported )
{
{
XYLOG ( XYLOG_SEVERITY_ERROR , " AF not Supported " ) ;
XYLOG ( XYLOG_SEVERITY_ERROR , " AF not Supported " ) ;
@ -561,6 +581,9 @@ int NdkCamera::open(const std::string& cameraId) {
status = ACaptureRequest_setEntry_i32 ( capture_request , ACAMERA_CONTROL_AE_TARGET_FPS_RANGE , 2 , fpsRange ) ;
status = ACaptureRequest_setEntry_i32 ( capture_request , ACAMERA_CONTROL_AE_TARGET_FPS_RANGE , 2 , fpsRange ) ;
}
}
uint8_t flashMode = ACAMERA_FLASH_MODE_OFF ;
status = ACaptureRequest_setEntry_u8 ( capture_request , ACAMERA_FLASH_MODE , 1 , & flashMode ) ;
uint8_t nrMode = ACAMERA_NOISE_REDUCTION_MODE_FAST ;
uint8_t nrMode = ACAMERA_NOISE_REDUCTION_MODE_FAST ;
status = ACaptureRequest_setEntry_u8 ( capture_request , ACAMERA_NOISE_REDUCTION_MODE , 1 , & nrMode ) ;
status = ACaptureRequest_setEntry_u8 ( capture_request , ACAMERA_NOISE_REDUCTION_MODE , 1 , & nrMode ) ;
@ -649,7 +672,7 @@ int NdkCamera::open(const std::string& cameraId) {
if ( maxRegions [ 0 ] > 0 )
if ( maxRegions [ 0 ] > 0 )
{
{
int32_t aeRegions [ ] = { 0 , 0 , activeArraySize [ 0 ] - 1 , activeArraySize [ 1 ] - 1 , 1000 } ;
int32_t aeRegions [ ] = { 0 , 0 , activeArraySize [ 0 ] - 1 , activeArraySize [ 1 ] - 1 , 1000 } ;
status = ACaptureRequest_setEntry_i32 ( capture_request , ACAMERA_CONTROL_AE_REGIONS , 5 , aeRegions ) ;
// status = ACaptureRequest_setEntry_i32(capture_request, ACAMERA_CONTROL_AE_REGIONS, 5, aeRegions);
if ( status = = ACAMERA_OK )
if ( status = = ACAMERA_OK )
{
{
// m_imagesCaptured = ~0;
// m_imagesCaptured = ~0;
@ -689,8 +712,11 @@ int NdkCamera::open(const std::string& cameraId) {
// TODO:
// TODO:
// m_imagesCaptured = 0;
// m_imagesCaptured = 0;
uint8_t awbMode = ACAMERA_CONTROL_AWB_MODE_AUTO ;
if ( awbSupported )
status = ACaptureRequest_setEntry_u8 ( capture_request , ACAMERA_CONTROL_AWB_MODE , 1 , & awbMode ) ;
{
uint8_t awbMode = ACAMERA_CONTROL_AWB_MODE_AUTO ;
status = ACaptureRequest_setEntry_u8 ( capture_request , ACAMERA_CONTROL_AWB_MODE , 1 , & awbMode ) ;
}
#if 0
#if 0
uint8_t antiBandingMode = ACAMERA_CONTROL_AE_ANTIBANDING_MODE_60HZ ;
uint8_t antiBandingMode = ACAMERA_CONTROL_AE_ANTIBANDING_MODE_60HZ ;
@ -897,6 +923,8 @@ void NdkCamera::onImageAvailable(AImageReader* reader)
return ;
return ;
}
}
mResult . duration = GetMicroTimeStamp ( ) - m_startTime ;
int32_t format ;
int32_t format ;
AImage_getFormat ( image , & format ) ;
AImage_getFormat ( image , & format ) ;
@ -1175,6 +1203,37 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
status = ACameraMetadata_getConstEntry ( result , ACAMERA_CONTROL_AE_STATE , & val ) ;
status = ACameraMetadata_getConstEntry ( result , ACAMERA_CONTROL_AE_STATE , & val ) ;
mResult . aeState = ( status = = ACAMERA_OK ) ? * ( val . data . u8 ) : ACAMERA_CONTROL_AE_STATE_INACTIVE ;
mResult . aeState = ( status = = ACAMERA_OK ) ? * ( val . data . u8 ) : ACAMERA_CONTROL_AE_STATE_INACTIVE ;
val = { 0 } ;
status = ACameraMetadata_getConstEntry ( result , ACAMERA_CONTROL_AWB_STATE , & val ) ;
mResult . awbState = ( status = = ACAMERA_OK ) ? val . data . u8 [ 0 ] : ACAMERA_CONTROL_AWB_STATE_INACTIVE ;
val = { 0 } ;
status = ACameraMetadata_getConstEntry ( result , ACAMERA_CONTROL_AF_STATE , & val ) ;
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 ) ;
if ( awbSupported & & awbLockAvailable & & mResult . awbState = = ACAMERA_CONTROL_AWB_STATE_CONVERGED )
{
uint8_t awbLock = ACAMERA_CONTROL_AWB_LOCK_ON ;
status = ACaptureRequest_setEntry_u8 ( capture_request , ACAMERA_CONTROL_AWB_LOCK , 1 , & awbLock ) ;
}
if ( m_params . autoExposure ! = 0 )
{
if ( mResult . aeState = = ACAMERA_CONTROL_AE_STATE_PRECAPTURE )
{
uint8_t aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_START ;
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 ) )
{
uint8_t aeLock = ACAMERA_CONTROL_AE_LOCK_ON ;
status = ACaptureRequest_setEntry_u8 ( capture_request , ACAMERA_CONTROL_AE_LOCK , 1 , & aeLock ) ;
}
}
if ( ! lightDetected )
if ( ! lightDetected )
{
{
val = { 0 } ;
val = { 0 } ;
@ -1199,30 +1258,44 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
unsigned long long ts = GetMicroTimeStamp ( ) ;
unsigned long long ts = GetMicroTimeStamp ( ) ;
if ( ts - m_startTime > = m_params . focusTimeout * 2 )
if ( ts - m_startTime > = m_params . focusTimeout * 2 )
{
{
XYLOG ( XYLOG_SEVERITY_WARNING , " onCaptureCompleted Timeout for AF/AE And will Capture AFS=%u AES=%u Time=%u " , ( unsigned int ) mResult . afState , ( unsigned int ) mResult . aeState , ( unsigned int ) ( ts - m_startTime ) ) ;
XYLOG ( XYLOG_SEVERITY_WARNING , " Prepare Capture Timeout for 3A And will Capture AFS=%u AES=%u AWBS=%u Time=%u " ,
( unsigned int ) mResult . afState , ( unsigned int ) mResult . aeState , ( unsigned int ) mResult . awbState , ( unsigned int ) ( ts - m_startTime ) ) ;
m_imagesCaptured = 0 ;
m_imagesCaptured = 0 ;
}
}
else
else
{
{
if ( m_params. autoExposure ! = 0 )
if ( awbSupported )
{
{
if ( m Result. aeState = = ACAMERA_CONTROL_AE_STATE_SEARCHING )
if ( m _params. wait3ALocked )
{
{
// Waiting
if ( mResult . awbState ! = ACAMERA_CONTROL_AWB_STATE_LOCKED )
return ;
{
return ;
}
}
}
else if ( mResult . aeState = = ACAMERA_CONTROL_AE_STATE_PRECAPTURE )
else
{
{
uint8_t aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_START ;
if ( mResult . awbState ! = ACAMERA_CONTROL_AWB_STATE_CONVERGED )
status = ACaptureRequest_setEntry_u8 ( capture_request , ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER , 1 , & aePrecatureTrigger ) ;
{
return ;
return ;
}
}
}
else if ( mResult . aeState = = ACAMERA_CONTROL_AE_STATE_CONVERGED )
}
if ( m_params . autoExposure ! = 0 )
{
if ( m_params . wait3ALocked )
{
{
if ( aeLockAvailable )
if ( mResult. aeState ! = ACAMERA_CONTROL_AE_STATE_LOCKED )
{
{
uint8_t aeLock = ACAMERA_CONTROL_AE_LOCK_ON ;
return ;
status = ACaptureRequest_setEntry_u8 ( capture_request , ACAMERA_CONTROL_AE_LOCK , 1 , & aeLock ) ;
}
}
else
{
if ( mResult . aeState ! = ACAMERA_CONTROL_AE_STATE_CONVERGED & & mResult . aeState ! = ACAMERA_CONTROL_AE_STATE_FLASH_REQUIRED )
{
return ;
}
}
}
}
}
}
@ -1271,10 +1344,6 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
// ACaptureRequest_setEntry_i32(capture_request, ACAMERA_SENSOR_SENSITIVITY, 1, &sensitivity_);
// ACaptureRequest_setEntry_i32(capture_request, ACAMERA_SENSOR_SENSITIVITY, 1, &sensitivity_);
mResult . autoExposure = aeMode ;
mResult . autoExposure = aeMode ;
val = { 0 } ;
status = ACameraMetadata_getConstEntry ( result , ACAMERA_CONTROL_AWB_STATE , & val ) ;
mResult . awbState = ( status = = ACAMERA_OK ) ? val . data . u8 [ 0 ] : 0 ;
val = { 0 } ;
val = { 0 } ;
float focusDistance = NAN ;
float focusDistance = NAN ;
if ( afSupported & & ( m_params . autoFocus ! = 0 ) )
if ( afSupported & & ( m_params . autoFocus ! = 0 ) )