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

NWMQTT
Matthew 2 months ago
parent d1d34ebcfc
commit eb96c9c6c7

@ -282,6 +282,7 @@ NdkCamera::NdkCamera(int32_t width, int32_t height, const NdkCamera::CAMERA_PARA
mLdr = ~0; mLdr = ~0;
mFinalLdr = 0; mFinalLdr = 0;
mFinalOutputFormat = AIMAGE_FORMAT_YUV_420_888; mFinalOutputFormat = AIMAGE_FORMAT_YUV_420_888;
m_delayFrames = 0;
} }
NdkCamera::~NdkCamera() NdkCamera::~NdkCamera()
@ -813,7 +814,8 @@ NdkCamera::CaptureRequest* NdkCamera::CreateRequest(bool isPreviewRequest)
uint8_t ctrlMode = ACAMERA_CONTROL_MODE_AUTO; uint8_t ctrlMode = ACAMERA_CONTROL_MODE_AUTO;
status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_MODE, 1, &ctrlMode); 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); status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_CAPTURE_INTENT, 1, &captureIntent);
uint8_t flashMode = ACAMERA_FLASH_MODE_OFF; uint8_t flashMode = ACAMERA_FLASH_MODE_OFF;
@ -1468,6 +1470,29 @@ void NdkCamera::onCaptureProgressed(ACameraCaptureSession* session, ACaptureRequ
void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureRequest* request, const ACameraMetadata* result) 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(); m_locker.lock();
int64_t minTs = m_minTimestamp; int64_t minTs = m_minTimestamp;
m_locker.unlock(); m_locker.unlock();
@ -1488,7 +1513,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
CaptureRequest* pCaptureRequest = reinterpret_cast<CaptureRequest *>(context); CaptureRequest* pCaptureRequest = reinterpret_cast<CaptureRequest *>(context);
bool readyForCapture = true; bool readyForCapture = true;
camera_status_t status = ACAMERA_ERROR_BASE;
uint64_t ts = GetMicroTimeStamp(); uint64_t ts = GetMicroTimeStamp();
uint8_t aeState = ACAMERA_CONTROL_AE_STATE_INACTIVE; uint8_t aeState = ACAMERA_CONTROL_AE_STATE_INACTIVE;
@ -1688,7 +1713,6 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
} }
#endif #endif
mCaptureTriggered = true;
} }
} }
@ -2264,6 +2288,4 @@ void NdkCamera::SetupMFNR(ACameraMetadata* characteristics, ACaptureRequest* req
ALOGE("Failed to set MTK_CONTROL_AE_EXPOSURE_COMPENSATION, status: %d", status); ALOGE("Failed to set MTK_CONTROL_AE_EXPOSURE_COMPENSATION, status: %d", status);
} }
} }
} }

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

Loading…
Cancel
Save