Merge "camera2 ndk/vndk: cleanup->stop CameraDevice's looper in ~ACameraDevice()" into qt-r1-dev

gugelfrei
Jayant Chowdhary 5 years ago committed by Android (Google) Code Review
commit 95f6e43fa2

@ -28,6 +28,10 @@
#include "ACameraCaptureSession.inc"
ACameraDevice::~ACameraDevice() {
mDevice->stopLooper();
}
namespace android {
namespace acam {
@ -116,14 +120,10 @@ CameraDevice::~CameraDevice() {
if (!isClosed()) {
disconnectLocked(session);
}
LOG_ALWAYS_FATAL_IF(mCbLooper != nullptr,
"CameraDevice looper should've been stopped before ~CameraDevice");
mCurrentSession = nullptr;
if (mCbLooper != nullptr) {
mCbLooper->unregisterHandler(mHandler->id());
mCbLooper->stop();
}
}
mCbLooper.clear();
mHandler.clear();
}
void
@ -892,6 +892,16 @@ CameraDevice::onCaptureErrorLocked(
return;
}
void CameraDevice::stopLooper() {
Mutex::Autolock _l(mDeviceLock);
if (mCbLooper != nullptr) {
mCbLooper->unregisterHandler(mHandler->id());
mCbLooper->stop();
}
mCbLooper.clear();
mHandler.clear();
}
CameraDevice::CallbackHandler::CallbackHandler(const char* id) : mId(id) {
}

@ -109,6 +109,9 @@ class CameraDevice final : public RefBase {
inline ACameraDevice* getWrapper() const { return mWrapper; };
// Stop the looper thread and unregister the handler
void stopLooper();
private:
friend ACameraCaptureSession;
camera_status_t checkCameraClosedOrErrorLocked() const;
@ -354,7 +357,7 @@ struct ACameraDevice {
sp<ACameraMetadata> chars) :
mDevice(new android::acam::CameraDevice(id, cb, chars, this)) {}
~ACameraDevice() {};
~ACameraDevice();
/*******************
* NDK public APIs *

@ -45,13 +45,7 @@
using namespace android;
ACameraDevice::~ACameraDevice() {
Mutex::Autolock _l(mDevice->mDeviceLock);
if (mDevice->mCbLooper != nullptr) {
mDevice->mCbLooper->unregisterHandler(mDevice->mHandler->id());
mDevice->mCbLooper->stop();
}
mDevice->mCbLooper.clear();
mDevice->mHandler.clear();
mDevice->stopLooper();
}
namespace android {
@ -140,13 +134,9 @@ CameraDevice::~CameraDevice() {
disconnectLocked(session);
}
mCurrentSession = nullptr;
if (mCbLooper != nullptr) {
mCbLooper->unregisterHandler(mHandler->id());
mCbLooper->stop();
}
LOG_ALWAYS_FATAL_IF(mCbLooper != nullptr,
"CameraDevice looper should've been stopped before ~CameraDevice");
}
mCbLooper.clear();
mHandler.clear();
}
void
@ -1410,6 +1400,16 @@ CameraDevice::checkAndFireSequenceCompleteLocked() {
}
}
void CameraDevice::stopLooper() {
Mutex::Autolock _l(mDeviceLock);
if (mCbLooper != nullptr) {
mCbLooper->unregisterHandler(mHandler->id());
mCbLooper->stop();
}
mCbLooper.clear();
mHandler.clear();
}
/**
* Camera service callback implementation
*/

@ -133,6 +133,9 @@ class CameraDevice final : public RefBase {
bool setDeviceMetadataQueues();
inline ACameraDevice* getWrapper() const { return mWrapper; };
// Stop the looper thread and unregister the handler
void stopLooper();
private:
friend ACameraCaptureSession;
friend ACameraDevice;

Loading…
Cancel
Save