|
|
@ -164,6 +164,7 @@ NdkCamera::NdkCamera(int32_t width, int32_t height, const NdkCamera::CAMERA_PARA
|
|
|
|
mHeight = height;
|
|
|
|
mHeight = height;
|
|
|
|
|
|
|
|
|
|
|
|
mCaptureTriggered = false;
|
|
|
|
mCaptureTriggered = false;
|
|
|
|
|
|
|
|
mCaptureDispatched = false;
|
|
|
|
|
|
|
|
|
|
|
|
maxFrameDuration = 0;
|
|
|
|
maxFrameDuration = 0;
|
|
|
|
afSupported = false;
|
|
|
|
afSupported = false;
|
|
|
@ -1479,15 +1480,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)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
onOneCapture(mCharacteristics, result, mFinalLdr, ts - m_startTime, mOneFrame);
|
|
|
|
onOneCapture(mCharacteristics, result, mFinalLdr, ts - m_startTime, mOneFrame);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1519,17 +1526,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();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -1914,6 +1927,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);
|
|
|
@ -1922,9 +1936,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)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
onOneCapture(mCharacteristics, captureResult, mFinalLdr, ts - m_startTime, mOneFrame);
|
|
|
|
onOneCapture(mCharacteristics, captureResult, mFinalLdr, ts - m_startTime, mOneFrame);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1934,9 +1953,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();
|
|
|
|
}
|
|
|
|
}
|
|
|
|