实现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 }; mResult = { 0 };
mLdr = ~0; mLdr = ~0;
mFinalLdr = 0;
} }
NdkCamera::~NdkCamera() NdkCamera::~NdkCamera()
@ -1206,7 +1207,7 @@ void NdkCamera::onImageAvailable(AImageReader* reader)
} }
else else
{ {
uint32_t burstCaptures = m_params.burstCaptures; uint32_t burstCaptures = getBurstCaptures();
if (burstCaptures == 0) if (burstCaptures == 0)
{ {
burstCaptures = 1; burstCaptures = 1;
@ -1219,7 +1220,7 @@ void NdkCamera::onImageAvailable(AImageReader* reader)
// https://stackoverflow.com/questions/67063562 // https://stackoverflow.com/questions/67063562
if (mstatus != AMEDIA_IMGREADER_NO_BUFFER_AVAILABLE) 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); XYLOG(XYLOG_SEVERITY_ERROR, "AImageReader_acquireNextImage error: %d", mstatus);
} }
@ -1324,7 +1325,7 @@ void NdkCamera::onImageAvailable(AImageReader* reader)
if (captureCompleted) if (captureCompleted)
{ {
onOneCapture(mCharacteristics, result, mLdr, mOneFrame); onOneCapture(mCharacteristics, result, mFinalLdr, mOneFrame);
} }
} }
else else
@ -1337,7 +1338,7 @@ void NdkCamera::onImageAvailable(AImageReader* reader)
// https://stackoverflow.com/questions/67063562 // https://stackoverflow.com/questions/67063562
if (mstatus != AMEDIA_IMGREADER_NO_BUFFER_AVAILABLE) 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); 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", 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)); (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(); uint32_t burstCaptures = getBurstCaptures();
if (burstCaptures == 0) if (burstCaptures == 0)
{ {
@ -1742,7 +1746,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
if (captureCompleted) if (captureCompleted)
{ {
onOneCapture(mCharacteristics, captureResult, mLdr, mOneFrame); onOneCapture(mCharacteristics, captureResult, mFinalLdr, mOneFrame);
} }
} }
else else
@ -1769,7 +1773,7 @@ void NdkCamera::FireBurstCapture()
std::vector<std::shared_ptr<AImage> > captureFrames; std::vector<std::shared_ptr<AImage> > captureFrames;
m_locker.lock(); m_locker.lock();
ldr = mLdr; ldr = mFinalLdr;
captureResults.swap(mCaptureResults); captureResults.swap(mCaptureResults);
captureFrames.swap(mCaptureFrames); captureFrames.swap(mCaptureFrames);
m_locker.unlock(); m_locker.unlock();
@ -1894,12 +1898,13 @@ bool NdkCamera::IsCameraAvailable(const std::string& cameraId)
int32_t NdkCamera::getOutputFormat() const 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 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, void NdkCamera::CreateSession(ANativeWindow* previewWindow,

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

Loading…
Cancel
Save