实现RAW自动切换

TempBranch
Matthew 8 months ago
parent 275961e581
commit ec09fc8dff

@ -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,

@ -81,8 +81,8 @@ public:
unsigned int orientation:3;
unsigned int zoom : 1;
unsigned int wait3ALocked : 3;
unsigned int burstRawCapture : 1;
unsigned int reserved : 18;
unsigned int burstRawCapture : 2;
unsigned int reserved : 16;
int64_t exposureTime;
unsigned int sensitivity;
int compensation;
@ -183,7 +183,7 @@ public:
uint32_t GetLdr() const
{
return mLdr;
return mFinalLdr;
}
bool IsCameraAvailable(const std::string& cameraId);
@ -255,6 +255,7 @@ protected:
std::shared_ptr<ACameraMetadata> mPreviewResults;
std::vector<std::shared_ptr<ACameraMetadata> > mCaptureResults;
uint32_t mLdr;
uint32_t mFinalLdr;
std::vector<std::shared_ptr<AImage> > mCaptureFrames;
cv::Mat mOneFrame;

Loading…
Cancel
Save