实现预览到静态抓拍的主动切换

nx2024
Matthew 2 months ago
parent 002f25be93
commit d0ac8b4ce7

@ -234,6 +234,7 @@ NdkCamera::NdkCamera(int32_t width, int32_t height, const NdkCamera::CAMERA_PARA
mLdr = ~0;
mFinalLdr = 0;
mFinalOutputFormat = AIMAGE_FORMAT_YUV_420_888;
m_delayFrames = 0;
}
NdkCamera::~NdkCamera()
@ -770,7 +771,8 @@ NdkCamera::CaptureRequest* NdkCamera::CreateRequest(bool isPreviewRequest)
uint8_t ctrlMode = ACAMERA_CONTROL_MODE_AUTO;
status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_MODE, 1, &ctrlMode);
uint8_t captureIntent = GetCaptureIntent((ACameraDevice_request_template)m_params.requestTemplate);
// uint8_t captureIntent = GetCaptureIntent((ACameraDevice_request_template)m_params.requestTemplate);
uint8_t captureIntent = ACAMERA_CONTROL_CAPTURE_INTENT_PREVIEW;
status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_CAPTURE_INTENT, 1, &captureIntent);
uint8_t flashMode = ACAMERA_FLASH_MODE_OFF;
@ -1416,6 +1418,29 @@ void NdkCamera::onCaptureProgressed(ACameraCaptureSession* session, ACaptureRequ
void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureRequest* request, const ACameraMetadata* result)
{
camera_status_t status = ACAMERA_ERROR_BASE;
m_delayFrames++;
if (m_delayFrames <= 4)
{
if (m_delayFrames == 4)
{
uint8_t captureIntent = GetCaptureIntent((ACameraDevice_request_template)m_params.requestTemplate);
if (captureIntent != ACAMERA_CONTROL_CAPTURE_INTENT_PREVIEW)
{
status = ACaptureRequest_setEntry_u8(request, ACAMERA_CONTROL_CAPTURE_INTENT, 1, &captureIntent);
if (m_params.burstRawCapture == 2 || m_params.burstRawCapture == 3)
{
int32_t stillCaptureHint = 1;
status = ACaptureRequest_setEntry_i32(request, MTK_CONTROL_CAPTURE_HINT_FOR_ISP_TUNING, 1, &stillCaptureHint);
}
}
mCaptureTriggered = true;
}
return;
}
m_locker.lock();
int64_t minTs = m_minTimestamp;
m_locker.unlock();
@ -1436,7 +1461,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
CaptureRequest* pCaptureRequest = reinterpret_cast<CaptureRequest *>(context);
bool readyForCapture = true;
camera_status_t status = ACAMERA_ERROR_BASE;
uint64_t ts = GetMicroTimeStamp();
uint8_t aeState = ACAMERA_CONTROL_AE_STATE_INACTIVE;
@ -1626,7 +1651,6 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
}
#endif
mCaptureTriggered = true;
}
}
@ -2202,6 +2226,4 @@ void NdkCamera::SetupMFNR(ACameraMetadata* characteristics, ACaptureRequest* req
ALOGE("Failed to set MTK_CONTROL_AE_EXPOSURE_COMPENSATION, status: %d", status);
}
}
}

@ -246,6 +246,7 @@ protected:
CAPTURE_RESULT mResult;
uint64_t m_startTime;
uint64_t m_delayFrames;
protected:

Loading…
Cancel
Save