|
|
@ -1004,6 +1004,7 @@ void NdkCamera::close()
|
|
|
|
mPreviewResults.reset();
|
|
|
|
mPreviewResults.reset();
|
|
|
|
mCaptureResults.clear();
|
|
|
|
mCaptureResults.clear();
|
|
|
|
mCaptureFrames.clear();
|
|
|
|
mCaptureFrames.clear();
|
|
|
|
|
|
|
|
mCaptureResultMap.clear();
|
|
|
|
|
|
|
|
|
|
|
|
if ((ACameraManager *)camera_manager != NULL)
|
|
|
|
if ((ACameraManager *)camera_manager != NULL)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -1324,6 +1325,8 @@ void NdkCamera::onImageAvailable(AImageReader* reader)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
m_photoTaken = true;
|
|
|
|
m_photoTaken = true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int64_t frameTs = 0;
|
|
|
|
|
|
|
|
mstatus = AImage_getTimestamp(image, &frameTs);
|
|
|
|
AImage_delete(image);
|
|
|
|
AImage_delete(image);
|
|
|
|
|
|
|
|
|
|
|
|
bool captureCompleted = false;
|
|
|
|
bool captureCompleted = false;
|
|
|
@ -1331,12 +1334,25 @@ void NdkCamera::onImageAvailable(AImageReader* reader)
|
|
|
|
m_locker.lock();
|
|
|
|
m_locker.lock();
|
|
|
|
if (!frame.empty())
|
|
|
|
if (!frame.empty())
|
|
|
|
{
|
|
|
|
{
|
|
|
|
mOneFrame.push_back(frame);
|
|
|
|
mOneFrame.push_back(std::make_pair<>(frameTs, frame));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (mCaptureResults.size() == expectedTimes && mOneFrame.size() == expectedTimes)
|
|
|
|
if (mOneFrame.size() >= expectedTimes)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
bool allExisted = true;
|
|
|
|
|
|
|
|
for (auto itFrame = mOneFrame.cbegin(); itFrame != mOneFrame.cend(); ++itFrame)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (mCaptureResultMap.find(itFrame->first) == mCaptureResultMap.cend())
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
allExisted = false;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (allExisted)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
captureCompleted = true;
|
|
|
|
captureCompleted = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (captureCompleted && !mCaptureDispatched)
|
|
|
|
if (captureCompleted && !mCaptureDispatched)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
mCaptureDispatched = true;
|
|
|
|
mCaptureDispatched = true;
|
|
|
@ -1814,12 +1830,32 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
|
|
|
|
bool captureDispatchable = false;
|
|
|
|
bool captureDispatchable = false;
|
|
|
|
size_t expectedTimes = mCaptureRequests.size() - 1;
|
|
|
|
size_t expectedTimes = mCaptureRequests.size() - 1;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int64_t resultTimestamp = GetTimestamp(result);
|
|
|
|
std::shared_ptr<ACameraMetadata> captureResult(pCopy, ACameraMetadata_free);
|
|
|
|
std::shared_ptr<ACameraMetadata> captureResult(pCopy, ACameraMetadata_free);
|
|
|
|
|
|
|
|
|
|
|
|
if (m_params.burstRawCapture == 0)
|
|
|
|
if (m_params.burstRawCapture == 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
m_locker.lock();
|
|
|
|
m_locker.lock();
|
|
|
|
mCaptureResults.push_back(captureResult);
|
|
|
|
mCaptureResults.push_back(captureResult);
|
|
|
|
captureCompleted = mCaptureFrames.size() >= expectedTimes && mCaptureResults.size() >= expectedTimes;
|
|
|
|
mCaptureResultMap[resultTimestamp] = captureResult;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (mOneFrame.size() >= expectedTimes)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
bool allExisted = true;
|
|
|
|
|
|
|
|
for (auto itFrame = mOneFrame.cbegin(); itFrame != mOneFrame.cend(); ++itFrame)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (mCaptureResultMap.find(itFrame->first) == mCaptureResultMap.cend())
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
allExisted = false;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (allExisted)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
captureCompleted = true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (captureCompleted && !mCaptureDispatched)
|
|
|
|
if (captureCompleted && !mCaptureDispatched)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
mCaptureDispatched = true;
|
|
|
|
mCaptureDispatched = true;
|
|
|
@ -1856,6 +1892,18 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int64_t NdkCamera::GetTimestamp(const ACameraMetadata* result)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
ACameraMetadata_const_entry entry;
|
|
|
|
|
|
|
|
camera_status_t status = ACameraMetadata_getConstEntry(result, ACAMERA_SENSOR_TIMESTAMP, &entry);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (status == ACAMERA_OK && entry.count > 0) {
|
|
|
|
|
|
|
|
return entry.data.i64[0];
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void NdkCamera::FireOneCapture(uint64_t ts)
|
|
|
|
void NdkCamera::FireOneCapture(uint64_t ts)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
#ifdef OUTPUT_DBG_INFO
|
|
|
|
#ifdef OUTPUT_DBG_INFO
|
|
|
@ -1866,7 +1914,6 @@ void NdkCamera::FireOneCapture(uint64_t ts)
|
|
|
|
params.push_back(cv::IMWRITE_JPEG_QUALITY);
|
|
|
|
params.push_back(cv::IMWRITE_JPEG_QUALITY);
|
|
|
|
params.push_back(50);
|
|
|
|
params.push_back(50);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (auto it = mOneFrame.cbegin(); it != mOneFrame.cend(); ++it)
|
|
|
|
for (auto it = mOneFrame.cbegin(); it != mOneFrame.cend(); ++it)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
std::string fileName = "/sdcard/com.xypower.mpapp/tmp/" + dt;
|
|
|
|
std::string fileName = "/sdcard/com.xypower.mpapp/tmp/" + dt;
|
|
|
@ -1876,11 +1923,11 @@ void NdkCamera::FireOneCapture(uint64_t ts)
|
|
|
|
EnumCameraResult(result.get(), captureResult);
|
|
|
|
EnumCameraResult(result.get(), captureResult);
|
|
|
|
|
|
|
|
|
|
|
|
fileName += "_" + mCameraId + "_" + std::to_string(captureResult.aeState) + "_" + std::to_string(idx) + ".jpg";
|
|
|
|
fileName += "_" + mCameraId + "_" + std::to_string(captureResult.aeState) + "_" + std::to_string(idx) + ".jpg";
|
|
|
|
cv::imwrite(fileName, *it, params);
|
|
|
|
cv::imwrite(fileName, it->second, params);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
onOneCapture(mCharacteristics, mCaptureResults.back(), mFinalLdr, ts - m_startTime, mOneFrame.back());
|
|
|
|
onOneCapture(mCharacteristics, mCaptureResults.back(), mFinalLdr, ts - m_startTime, mOneFrame.back().second);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void NdkCamera::FireBurstCapture()
|
|
|
|
void NdkCamera::FireBurstCapture()
|
|
|
|