增加拍照错误处理

TempBranch
Matthew 7 months ago
parent 7978dd32a7
commit 539b701460

@ -1456,6 +1456,7 @@ bool CPhoneDevice::TakePhoto(const IDevice::PHOTO_INFO& photoInfo, const vector<
}
else
{
bool hasFatalError = mCamera->HasFatalError();
XYLOG(XYLOG_SEVERITY_DEBUG, "TP: Failed to OpenCamera CH=%u PR=%X PHOTOID=%u", (unsigned int)photoInfo.channel, (unsigned int)photoInfo.preset, photoInfo.photoId);
delete mCamera;
mCamera = NULL;
@ -1466,6 +1467,12 @@ bool CPhoneDevice::TakePhoto(const IDevice::PHOTO_INFO& photoInfo, const vector<
{
TurnOffOtg(NULL);
}
if (hasFatalError)
{
XYLOG(XYLOG_SEVERITY_DEBUG, "TP: Fatal Error Happened, will RestartAPP in 60s CH=%u PR=%X PHOTOID=%u", (unsigned int)photoInfo.channel, (unsigned int)photoInfo.preset, photoInfo.photoId);
RestartApp(REBOOT_TYPE_APP, 60000, "FatalErrorOnCamera");
}
}
}
else if (mPhotoInfo.usingSysCamera == 1)
@ -1872,9 +1879,31 @@ bool CPhoneDevice::onBurstCapture(std::shared_ptr<ACameraMetadata> characteristi
XYLOG(XYLOG_SEVERITY_ERROR, "Start HDR CH=%u IMGID=%u", (uint32_t)photoInfo.channel, (uint32_t)photoInfo.photoId);
std::vector<std::vector<uint8_t> > localFrames;
localFrames.swap(pByteArrays.get()->byteArrays);
#ifdef _DEBUG
std::vector<uint8_t>& firstFrame = localFrames[0];
writeFile("/sdcard/com.xypower.mpapp/tmp/dngs/1.dng", &firstFrame[0], firstFrame.size());
writeFile("/sdcard/com.xypower.mpapp/tmp/dngs/2.dng", &localFrames[1][0], localFrames[1].size());
writeFile("/sdcard/com.xypower.mpapp/tmp/dngs/3.dng", &localFrames[2][0], localFrames[2].size());
writeFile("/sdcard/com.xypower.mpapp/tmp/dngs/4.dng", &localFrames[3][0], localFrames[3].size());
// readFile("/sdcard/com.xypower.mpapp/tmp/dngs/001.dng", localFrames[0]);
// readFile("/sdcard/com.xypower.mpapp/tmp/dngs/002.dng", localFrames[1]);
// readFile("/sdcard/com.xypower.mpapp/tmp/dngs/003.dng", localFrames[2]);
// readFile("/sdcard/com.xypower.mpapp/tmp/dngs/004.dng", localFrames[3]);
#endif
doHdrPlus(localFrames, rgb);
cv::cvtColor(rgb.clone(), rgb, cv::COLOR_RGB2BGR);
localFrames.clear();
#ifdef _DEBUG
std::vector<int> params;
params.push_back(cv::IMWRITE_JPEG_QUALITY);
params.push_back(95);
cv::imwrite("/sdcard/com.xypower.mpapp/tmp/1.jpg", rgb, params);
#endif
XYLOG(XYLOG_SEVERITY_ERROR, "Finish HDR CH=%u IMGID=%u", (uint32_t)photoInfo.channel, (uint32_t)photoInfo.photoId);
{
@ -1917,7 +1946,7 @@ bool CPhoneDevice::onBurstCapture(std::shared_ptr<ACameraMetadata> characteristi
XYLOG(XYLOG_SEVERITY_ERROR, "Finish rotation CH=%u IMGID=%u", (uint32_t)photoInfo.channel, (uint32_t)photoInfo.photoId);
}
cv::cvtColor(rgb, rgb, cv::COLOR_RGB2BGR);
// cv::cvtColor(rgb, rgb, cv::COLOR_RGB2BGR);
}
else
{

@ -170,6 +170,7 @@ NdkCamera::NdkCamera(int32_t width, int32_t height, const NdkCamera::CAMERA_PARA
awbMode = ACAMERA_CONTROL_AWB_MODE_AUTO;
aeLockAvailable = false;
awbLockAvailable = false;
m_fatalError = false;
sceneModeSupported = false;
@ -654,6 +655,10 @@ int NdkCamera::open(const std::string& cameraId) {
status = ACameraManager_openCamera(camera_manager, cameraId.c_str(), &camera_device_state_callbacks, &camera_device);
if (status != ACAMERA_OK)
{
if (status == ACAMERA_ERROR_MAX_CAMERA_IN_USE)
{
m_fatalError = true;
}
XYLOG(XYLOG_SEVERITY_ERROR, "Failed to open camera %s res=%d", cameraId.c_str(), status);
return 1;
}
@ -1160,6 +1165,21 @@ void NdkCamera::close()
XYLOG(XYLOG_SEVERITY_DEBUG, "CameraStatus::try close %s", mCameraId.c_str());
camera_status_t res = ACAMERA_OK;
/*
if (mPreviewImageReader != NULL)
{
AImageReader_setImageListener(mPreviewImageReader, NULL);
}
if (mImageReader != NULL)
{
AImageReader_setImageListener(mImageReader, NULL);
}
if (mImageReader2 != NULL)
{
AImageReader_setImageListener(mImageReader2, NULL);
}
*/
mCaptureFrames.clear();
if ((ACameraManager *)camera_manager != NULL)
@ -1211,7 +1231,7 @@ void NdkCamera::close()
if (mPreviewImageReader != NULL)
{
// AImageReader_setImageListener(image_reader, NULL);
AImageReader_setImageListener(mPreviewImageReader, NULL);
//XYLOG(XYLOG_SEVERITY_DEBUG, "CameraStatus::AImageReader_delete %s", mCameraId.c_str());
AImageReader_delete(mPreviewImageReader);
//XYLOG(XYLOG_SEVERITY_DEBUG, "CameraStatus::End AImageReader_delete %s", mCameraId.c_str());
@ -1233,7 +1253,7 @@ void NdkCamera::close()
if (mImageReader != NULL)
{
// AImageReader_setImageListener(image_reader, NULL);
AImageReader_setImageListener(mImageReader, NULL);
//XYLOG(XYLOG_SEVERITY_DEBUG, "CameraStatus::AImageReader_delete %s", mCameraId.c_str());
AImageReader_delete(mImageReader);
//XYLOG(XYLOG_SEVERITY_DEBUG, "CameraStatus::End AImageReader_delete %s", mCameraId.c_str());
@ -1255,7 +1275,7 @@ void NdkCamera::close()
if (mImageReader2 != NULL)
{
// AImageReader_setImageListener(image_reader, NULL);
AImageReader_setImageListener(mImageReader2, NULL);
//XYLOG(XYLOG_SEVERITY_DEBUG, "CameraStatus::AImageReader_delete %s", mCameraId.c_str());
AImageReader_delete(mImageReader2);
//XYLOG(XYLOG_SEVERITY_DEBUG, "CameraStatus::End AImageReader_delete %s", mCameraId.c_str());
@ -1327,7 +1347,7 @@ void NdkCamera::onImageAvailable(AImageReader* reader)
return;
}
// if (mLdr == ~0)
if (!mCaptureTriggered)
{
uint8_t* y_data = 0;
int y_len = 0;

@ -186,6 +186,11 @@ public:
return mFinalLdr;
}
bool HasFatalError() const
{
return m_fatalError;
}
bool IsCameraAvailable(const std::string& cameraId);
static bool convertAImageToNv21(AImage* image, uint8_t** nv21, int32_t& width, int32_t& height);
@ -211,6 +216,7 @@ protected:
uint8_t awbMode;
bool aeLockAvailable;
bool awbLockAvailable;
bool m_fatalError;
uint64_t numberOfPrecaptures;
unsigned long long m_precaptureStartTime;

Loading…
Cancel
Save