am 7c51cb81: Cancel autofocus in stopPreview.
Merge commit '7c51cb81f6aa8030d893463cbc65c0e18e2a6956' * commit '7c51cb81f6aa8030d893463cbc65c0e18e2a6956': Cancel autofocus in stopPreview.
This commit is contained in:
commit
d5b245b737
32
libcamera2/QualcommCameraHardware.cpp
Executable file → Normal file
32
libcamera2/QualcommCameraHardware.cpp
Executable file → Normal file
@ -1069,7 +1069,6 @@ void QualcommCameraHardware::release()
|
||||
struct msm_ctrl_cmd ctrlCmd;
|
||||
|
||||
if (mCameraRunning) {
|
||||
cancelAutoFocus();
|
||||
if(mRecordingCallback != NULL) {
|
||||
mRecordFrameLock.lock();
|
||||
mReleasedRecordingFrame = true;
|
||||
@ -1179,6 +1178,16 @@ void QualcommCameraHardware::stopPreviewInternal()
|
||||
{
|
||||
LOGV("stopPreviewInternal E: %d", mCameraRunning);
|
||||
if (mCameraRunning) {
|
||||
// Cancel auto focus.
|
||||
if (mAutoFocusCallback) {
|
||||
{
|
||||
Mutex::Autolock cbLock(&mCallbackLock);
|
||||
mAutoFocusCallback = NULL;
|
||||
mAutoFocusCallbackCookie = NULL;
|
||||
}
|
||||
cancelAutoFocus();
|
||||
}
|
||||
|
||||
mCameraRunning = !native_stop_preview(mCameraControlFd);
|
||||
if (!mCameraRunning && mPreviewInitialized) {
|
||||
deinitPreview();
|
||||
@ -1196,7 +1205,6 @@ void QualcommCameraHardware::stopPreview()
|
||||
|
||||
{
|
||||
Mutex::Autolock cbLock(&mCallbackLock);
|
||||
mAutoFocusCallback = NULL;
|
||||
mPreviewCallback = NULL;
|
||||
mPreviewCallbackCookie = NULL;
|
||||
if(mRecordingCallback != NULL)
|
||||
@ -1236,6 +1244,11 @@ void QualcommCameraHardware::runAutoFocus()
|
||||
mCallbackLock.unlock();
|
||||
if (cb != NULL)
|
||||
cb(status, data);
|
||||
|
||||
mCallbackLock.lock();
|
||||
mAutoFocusCallback = NULL;
|
||||
mAutoFocusCallbackCookie = NULL;
|
||||
mCallbackLock.unlock();
|
||||
}
|
||||
|
||||
void QualcommCameraHardware::cancelAutoFocus()
|
||||
@ -1263,17 +1276,22 @@ status_t QualcommCameraHardware::autoFocus(autofocus_callback af_cb,
|
||||
LOGV("autoFocus E");
|
||||
Mutex::Autolock l(&mLock);
|
||||
|
||||
if (mCameraControlFd < 0) {
|
||||
LOGE("not starting autofocus: main control fd %d", mCameraControlFd);
|
||||
return UNKNOWN_ERROR;
|
||||
}
|
||||
|
||||
if (mAutoFocusCallback != NULL) {
|
||||
LOGW("Auto focus is already in progress");
|
||||
return mAutoFocusCallback == af_cb ? NO_ERROR : INVALID_OPERATION;
|
||||
}
|
||||
|
||||
{
|
||||
Mutex::Autolock cbl(&mCallbackLock);
|
||||
mAutoFocusCallback = af_cb;
|
||||
mAutoFocusCallbackCookie = user;
|
||||
}
|
||||
|
||||
if (mCameraControlFd < 0) {
|
||||
LOGE("not starting autofocus: main control fd %d", mCameraControlFd);
|
||||
return UNKNOWN_ERROR;
|
||||
}
|
||||
|
||||
{
|
||||
mAutoFocusThreadLock.lock();
|
||||
if (!mAutoFocusThreadRunning) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user