增加camera设备中断的错误处理

serial
Matthew 1 year ago
parent 0025b89181
commit 85a3e5e67d

@ -31,7 +31,7 @@ add_definitions(-DSQLITE_THREADSAFE=1)
add_definitions(-DHAVE_STRING_H) # for memcpy in md5.c add_definitions(-DHAVE_STRING_H) # for memcpy in md5.c
# add_definitions(-DUSING_NRSEC) # add_definitions(-DUSING_NRSEC)
add_definitions(-DUSING_DOWSE) # add_definitions(-DUSING_DOWSE)
# set(OpenCV_DIR D:/Workspace/deps/OpenCV-android-sdk/sdk/native/jni/) # set(OpenCV_DIR D:/Workspace/deps/OpenCV-android-sdk/sdk/native/jni/)
set(OPENCV_EXTRA_MODULES_PATH D:/Workspace/Github/opencv_contrib/modules) set(OPENCV_EXTRA_MODULES_PATH D:/Workspace/Github/opencv_contrib/modules)

@ -153,6 +153,14 @@ void CPhoneDevice::CPhoneCamera::on_error(const std::string& msg)
} }
} }
void CPhoneDevice::CPhoneCamera::onDisconnected(ACameraDevice* device)
{
if (m_dev != NULL)
{
m_dev->onDisconnected(device);
}
}
CPhoneDevice::CPhoneDevice(JavaVM* vm, jobject service, const std::string& appPath, unsigned int netId, unsigned int versionCode) : mCameraPowerCount(0), mOtgCount(0), mVersionCode(versionCode) CPhoneDevice::CPhoneDevice(JavaVM* vm, jobject service, const std::string& appPath, unsigned int netId, unsigned int versionCode) : mCameraPowerCount(0), mOtgCount(0), mVersionCode(versionCode)
{ {
mCamera = NULL; mCamera = NULL;
@ -1324,6 +1332,25 @@ void CPhoneDevice::onError(const std::string& msg)
m_threadClose.swap(closeThread); m_threadClose.swap(closeThread);
} }
void CPhoneDevice::onDisconnected(ACameraDevice* device)
{
if (mCamera == NULL)
{
return;
}
XYLOG(XYLOG_SEVERITY_ERROR, "Failed to Take Photo (IMGID=%u) as for Disconnection", mPhotoInfo.photoId);
CPhoneCamera* pCamera = mCamera;
mCamera = NULL;
TakePhotoCb(false, mPhotoInfo, mPath, 0);
bool turnOffOtg = (mPhotoInfo.usbCamera != 0);
std::thread closeThread(&CPhoneDevice::CloseCamera2, this, pCamera, mPhotoInfo.photoId, turnOffOtg);
// closeThread.detach();
m_threadClose.swap(closeThread);
}
std::string CPhoneDevice::GetFileName() const std::string CPhoneDevice::GetFileName() const
{ {
return mPath; return mPath;

@ -159,6 +159,7 @@ public:
virtual ~CPhoneCamera(); virtual ~CPhoneCamera();
virtual bool on_image(cv::Mat& rgb); virtual bool on_image(cv::Mat& rgb);
virtual void on_error(const std::string& msg); virtual void on_error(const std::string& msg);
virtual void onDisconnected(ACameraDevice* device);
protected: protected:
CPhoneDevice* m_dev; CPhoneDevice* m_dev;
@ -235,6 +236,7 @@ protected:
bool OnImageReady(cv::Mat& mat); bool OnImageReady(cv::Mat& mat);
void onError(const std::string& msg); void onError(const std::string& msg);
void onDisconnected(ACameraDevice* device);
void CloseCamera2(CPhoneCamera* camera, unsigned int photoId, bool turnOffOtg); void CloseCamera2(CPhoneCamera* camera, unsigned int photoId, bool turnOffOtg);

@ -41,6 +41,7 @@ static void onUnavailabilityCallback(void* context, const char* cameraId)
static void onDisconnected(void* context, ACameraDevice* device) static void onDisconnected(void* context, ACameraDevice* device)
{ {
((NdkCamera*)context)->onDisconnected(device);
XYLOG(XYLOG_SEVERITY_INFO, "CameraStatus::onDisconnected CameraId: %s", ACameraDevice_getId(device)); XYLOG(XYLOG_SEVERITY_INFO, "CameraStatus::onDisconnected CameraId: %s", ACameraDevice_getId(device));
} }
@ -376,7 +377,7 @@ int NdkCamera::open(const std::string& cameraId) {
{ {
ACameraDevice_StateCallbacks camera_device_state_callbacks; ACameraDevice_StateCallbacks camera_device_state_callbacks;
camera_device_state_callbacks.context = this; camera_device_state_callbacks.context = this;
camera_device_state_callbacks.onDisconnected = onDisconnected; camera_device_state_callbacks.onDisconnected = ::onDisconnected;
camera_device_state_callbacks.onError = onError; camera_device_state_callbacks.onError = onError;
status = ACameraManager_openCamera(camera_manager, cameraId.c_str(), &camera_device_state_callbacks, &camera_device); status = ACameraManager_openCamera(camera_manager, cameraId.c_str(), &camera_device_state_callbacks, &camera_device);
@ -710,6 +711,11 @@ void NdkCamera::on_error(const std::string& msg)
{ {
} }
void NdkCamera::onDisconnected(ACameraDevice* device)
{
}
bool NdkCamera::on_image(cv::Mat& rgb) bool NdkCamera::on_image(cv::Mat& rgb)
{ {
return false; return false;

@ -106,6 +106,7 @@ public:
virtual bool on_image(cv::Mat& rgb); virtual bool on_image(cv::Mat& rgb);
virtual void on_error(const std::string& msg); virtual void on_error(const std::string& msg);
virtual void on_image(const unsigned char* nv21, int nv21_width, int nv21_height); virtual void on_image(const unsigned char* nv21, int nv21_width, int nv21_height);
virtual void onDisconnected(ACameraDevice* device);
void onCaptureProgressed(ACameraCaptureSession* session, ACaptureRequest* request, const ACameraMetadata* result); void onCaptureProgressed(ACameraCaptureSession* session, ACaptureRequest* request, const ACameraMetadata* result);
void onCaptureCompleted(ACameraCaptureSession* session, ACaptureRequest* request, const ACameraMetadata* result); void onCaptureCompleted(ACameraCaptureSession* session, ACaptureRequest* request, const ACameraMetadata* result);

Loading…
Cancel
Save