|
|
|
@ -164,6 +164,7 @@ NdkCamera::NdkCamera(int32_t width, int32_t height, const NdkCamera::CAMERA_PARA
|
|
|
|
|
|
|
|
|
|
mResult = { 0 };
|
|
|
|
|
mLdr = ~0;
|
|
|
|
|
mFinalLdr = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
NdkCamera::~NdkCamera()
|
|
|
|
@ -1206,7 +1207,7 @@ void NdkCamera::onImageAvailable(AImageReader* reader)
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
uint32_t burstCaptures = m_params.burstCaptures;
|
|
|
|
|
uint32_t burstCaptures = getBurstCaptures();
|
|
|
|
|
if (burstCaptures == 0)
|
|
|
|
|
{
|
|
|
|
|
burstCaptures = 1;
|
|
|
|
@ -1219,7 +1220,7 @@ void NdkCamera::onImageAvailable(AImageReader* reader)
|
|
|
|
|
// https://stackoverflow.com/questions/67063562
|
|
|
|
|
if (mstatus != AMEDIA_IMGREADER_NO_BUFFER_AVAILABLE)
|
|
|
|
|
{
|
|
|
|
|
if (mCaptureFrames.size() < m_params.burstCaptures)
|
|
|
|
|
if (mCaptureFrames.size() < burstCaptures)
|
|
|
|
|
{
|
|
|
|
|
XYLOG(XYLOG_SEVERITY_ERROR, "AImageReader_acquireNextImage error: %d", mstatus);
|
|
|
|
|
}
|
|
|
|
@ -1324,7 +1325,7 @@ void NdkCamera::onImageAvailable(AImageReader* reader)
|
|
|
|
|
|
|
|
|
|
if (captureCompleted)
|
|
|
|
|
{
|
|
|
|
|
onOneCapture(mCharacteristics, result, mLdr, mOneFrame);
|
|
|
|
|
onOneCapture(mCharacteristics, result, mFinalLdr, mOneFrame);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
@ -1337,7 +1338,7 @@ void NdkCamera::onImageAvailable(AImageReader* reader)
|
|
|
|
|
// https://stackoverflow.com/questions/67063562
|
|
|
|
|
if (mstatus != AMEDIA_IMGREADER_NO_BUFFER_AVAILABLE)
|
|
|
|
|
{
|
|
|
|
|
if (mCaptureFrames.size() < m_params.burstCaptures)
|
|
|
|
|
if (mCaptureFrames.size() < burstCaptures)
|
|
|
|
|
{
|
|
|
|
|
XYLOG(XYLOG_SEVERITY_ERROR, "AImageReader_acquireNextImage error: %d", mstatus);
|
|
|
|
|
}
|
|
|
|
@ -1676,6 +1677,9 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
|
|
|
|
|
XYLOG(XYLOG_SEVERITY_INFO, "Ready for Capture AFS=%u AES=%u AWBS=%u Time=%u",
|
|
|
|
|
(unsigned int)afState, (unsigned int)aeState, (unsigned int)awbState, (unsigned int)(ts - m_startTime));
|
|
|
|
|
|
|
|
|
|
// Must update mFinalLdr As getBurstCaptures getOutputFormat depends mFinalLdr
|
|
|
|
|
mFinalLdr = mLdr;
|
|
|
|
|
|
|
|
|
|
uint32_t burstCaptures = getBurstCaptures();
|
|
|
|
|
if (burstCaptures == 0)
|
|
|
|
|
{
|
|
|
|
@ -1742,7 +1746,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
|
|
|
|
|
|
|
|
|
|
if (captureCompleted)
|
|
|
|
|
{
|
|
|
|
|
onOneCapture(mCharacteristics, captureResult, mLdr, mOneFrame);
|
|
|
|
|
onOneCapture(mCharacteristics, captureResult, mFinalLdr, mOneFrame);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
@ -1769,7 +1773,7 @@ void NdkCamera::FireBurstCapture()
|
|
|
|
|
std::vector<std::shared_ptr<AImage> > captureFrames;
|
|
|
|
|
|
|
|
|
|
m_locker.lock();
|
|
|
|
|
ldr = mLdr;
|
|
|
|
|
ldr = mFinalLdr;
|
|
|
|
|
captureResults.swap(mCaptureResults);
|
|
|
|
|
captureFrames.swap(mCaptureFrames);
|
|
|
|
|
m_locker.unlock();
|
|
|
|
@ -1894,12 +1898,13 @@ bool NdkCamera::IsCameraAvailable(const std::string& cameraId)
|
|
|
|
|
|
|
|
|
|
int32_t NdkCamera::getOutputFormat() const
|
|
|
|
|
{
|
|
|
|
|
return m_params.burstRawCapture ? AIMAGE_FORMAT_RAW16 : AIMAGE_FORMAT_YUV_420_888;
|
|
|
|
|
return (m_params.burstRawCapture == 0) ? AIMAGE_FORMAT_YUV_420_888 : ((m_params.burstRawCapture != 1 || mFinalLdr <= 50) ? AIMAGE_FORMAT_RAW16 : AIMAGE_FORMAT_YUV_420_888);
|
|
|
|
|
// return m_params.burstRawCapture ? AIMAGE_FORMAT_RAW16 : AIMAGE_FORMAT_YUV_420_888;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int32_t NdkCamera::getBurstCaptures() const
|
|
|
|
|
{
|
|
|
|
|
return m_params.burstRawCapture ? m_params.burstCaptures : 1;
|
|
|
|
|
return (m_params.burstRawCapture == 0) ? 1 : ((m_params.burstRawCapture != 1 || mFinalLdr <= 50) ? m_params.burstCaptures : 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void NdkCamera::CreateSession(ANativeWindow* previewWindow,
|
|
|
|
|