避免两次调用

ptz
Matthew 4 months ago
parent 9ae985965c
commit 1a36d83b29

@ -166,6 +166,7 @@ NdkCamera::NdkCamera(int32_t width, int32_t height, const NdkCamera::CAMERA_PARA
mCaptureTriggered = false; mCaptureTriggered = false;
mFocusTriggered = false; mFocusTriggered = false;
mCaptureDispatched = false;
maxFrameDuration = 0; maxFrameDuration = 0;
afSupported = false; afSupported = false;
@ -1300,15 +1301,21 @@ void NdkCamera::onImageAvailable(AImageReader* reader)
std::shared_ptr<ACameraMetadata> result; std::shared_ptr<ACameraMetadata> result;
bool captureCompleted = false; bool captureCompleted = false;
bool captureDispatchable = false;
m_locker.lock(); m_locker.lock();
if (!mCaptureResults.empty()) if (!mCaptureResults.empty())
{ {
captureCompleted = true; captureCompleted = true;
result = mCaptureResults[0]; result = mCaptureResults[0];
} }
if (captureCompleted && !mCaptureDispatched)
{
mCaptureDispatched = true;
captureDispatchable = true;
}
m_locker.unlock(); m_locker.unlock();
if (captureCompleted) if (captureCompleted && captureDispatchable)
{ {
XYLOG(XYLOG_SEVERITY_DEBUG,"onOneCapture from onImageAvailable"); XYLOG(XYLOG_SEVERITY_DEBUG,"onOneCapture from onImageAvailable");
onOneCapture(mCharacteristics, result, mFinalLdr, ts - m_startTime, mOneFrame); onOneCapture(mCharacteristics, result, mFinalLdr, ts - m_startTime, mOneFrame);
@ -1341,17 +1348,23 @@ void NdkCamera::onImageAvailable(AImageReader* reader)
} }
bool captureCompleted = false; bool captureCompleted = false;
bool captureDispatchable = false;
size_t expectedTimes = mCaptureRequests.size() - 1; size_t expectedTimes = mCaptureRequests.size() - 1;
m_locker.lock(); m_locker.lock();
captureCompleted = mCaptureResults.size() >= expectedTimes && mCaptureFrames.size() >= expectedTimes; captureCompleted = mCaptureResults.size() >= expectedTimes && mCaptureFrames.size() >= expectedTimes;
if (captureCompleted && !mCaptureDispatched)
{
mCaptureDispatched = true;
captureDispatchable = true;
}
m_locker.unlock(); m_locker.unlock();
if (captureCompleted) if (captureCompleted && captureDispatchable)
{ {
FireBurstCapture(); FireBurstCapture();
} }
} }
} }
} }
@ -1766,6 +1779,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
ACameraMetadata* pCopy = ACameraMetadata_copy(result); ACameraMetadata* pCopy = ACameraMetadata_copy(result);
bool captureCompleted = false; bool captureCompleted = false;
bool captureDispatchable = false;
size_t expectedTimes = mCaptureRequests.size() - 1; size_t expectedTimes = mCaptureRequests.size() - 1;
std::shared_ptr<ACameraMetadata> captureResult(pCopy, ACameraMetadata_free); std::shared_ptr<ACameraMetadata> captureResult(pCopy, ACameraMetadata_free);
@ -1774,9 +1788,14 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
m_locker.lock(); m_locker.lock();
mCaptureResults.push_back(captureResult); mCaptureResults.push_back(captureResult);
captureCompleted = !mOneFrame.empty(); captureCompleted = !mOneFrame.empty();
if (captureCompleted && !mCaptureDispatched)
{
mCaptureDispatched = true;
captureDispatchable = true;
}
m_locker.unlock(); m_locker.unlock();
if (captureCompleted) if (captureCompleted && captureDispatchable)
{ {
XYLOG(XYLOG_SEVERITY_DEBUG,"onOneCapture from onCaptureCompleted"); XYLOG(XYLOG_SEVERITY_DEBUG,"onOneCapture from onCaptureCompleted");
onOneCapture(mCharacteristics, captureResult, mFinalLdr, ts - m_startTime, mOneFrame); onOneCapture(mCharacteristics, captureResult, mFinalLdr, ts - m_startTime, mOneFrame);
@ -1787,9 +1806,14 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
m_locker.lock(); m_locker.lock();
mCaptureResults.push_back(captureResult); mCaptureResults.push_back(captureResult);
captureCompleted = mCaptureFrames.size() >= expectedTimes && mCaptureResults.size() >= expectedTimes; captureCompleted = mCaptureFrames.size() >= expectedTimes && mCaptureResults.size() >= expectedTimes;
if (captureCompleted && !mCaptureDispatched)
{
mCaptureDispatched = true;
captureDispatchable = true;
}
m_locker.unlock(); m_locker.unlock();
if (captureCompleted) if (captureCompleted && captureDispatchable)
{ {
FireBurstCapture(); FireBurstCapture();
} }

@ -236,6 +236,7 @@ protected:
bool mCaptureTriggered; bool mCaptureTriggered;
bool mFocusTriggered; bool mFocusTriggered;
bool mCaptureDispatched;
CAPTURE_RESULT mResult; CAPTURE_RESULT mResult;
unsigned long long m_startTime; unsigned long long m_startTime;

Loading…
Cancel
Save