Camera: Handling implicit session close
If extension session is closed implicitly by eviction then close() will not be handled properly. This will prevent from initializing a new extension session. Test: Manual test with camera eviction scenario, CTS Bug: 287430132 Change-Id: Ia5d410362eb8ce44ca79ee067381e2d5e4622448
This commit is contained in:
committed by
Emilian Peev
parent
4694c51dd5
commit
86d8aeae3c
@@ -526,7 +526,11 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes
|
||||
synchronized (mInterfaceLock) {
|
||||
if (mInitialized) {
|
||||
try {
|
||||
mCaptureSession.stopRepeating();
|
||||
try {
|
||||
mCaptureSession.stopRepeating();
|
||||
} catch (IllegalStateException e) {
|
||||
// OK: already be closed, nothing else to do
|
||||
}
|
||||
mSessionProcessor.stopRepeating();
|
||||
mSessionProcessor.onCaptureSessionEnd();
|
||||
mSessionClosed = true;
|
||||
|
||||
@@ -111,6 +111,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {
|
||||
private int mPreviewProcessorType = IPreviewExtenderImpl.PROCESSOR_TYPE_NONE;
|
||||
|
||||
private boolean mInitialized;
|
||||
private boolean mSessionClosed;
|
||||
// Enable/Disable internal preview/(repeating request). Extensions expect
|
||||
// that preview/(repeating request) is enabled and active at any point in time.
|
||||
// In case the client doesn't explicitly enable repeating requests, the framework
|
||||
@@ -278,6 +279,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {
|
||||
mHandlerThread.start();
|
||||
mHandler = new Handler(mHandlerThread.getLooper());
|
||||
mInitialized = false;
|
||||
mSessionClosed = false;
|
||||
mInitializeHandler = new InitializeSessionHandler();
|
||||
mSessionId = sessionId;
|
||||
mSupportedRequestKeys = requestKeys;
|
||||
@@ -775,7 +777,12 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {
|
||||
synchronized (mInterfaceLock) {
|
||||
if (mInitialized) {
|
||||
mInternalRepeatingRequestEnabled = false;
|
||||
mCaptureSession.stopRepeating();
|
||||
try {
|
||||
mCaptureSession.stopRepeating();
|
||||
} catch (IllegalStateException e) {
|
||||
// OK: already be closed, nothing else to do
|
||||
mSessionClosed = true;
|
||||
}
|
||||
|
||||
ArrayList<CaptureStageImpl> captureStageList = new ArrayList<>();
|
||||
try {
|
||||
@@ -793,13 +800,14 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {
|
||||
Log.e(TAG, "Failed to disable extension! Extension service does not "
|
||||
+ "respond!");
|
||||
}
|
||||
if (!captureStageList.isEmpty()) {
|
||||
if (!captureStageList.isEmpty() && !mSessionClosed) {
|
||||
CaptureRequest disableRequest = createRequest(mCameraDevice, captureStageList,
|
||||
mCameraRepeatingSurface, CameraDevice.TEMPLATE_PREVIEW);
|
||||
mCaptureSession.capture(disableRequest,
|
||||
new CloseRequestHandler(mRepeatingRequestImageCallback), mHandler);
|
||||
}
|
||||
|
||||
mSessionClosed = true;
|
||||
mStatsAggregator.commit(/*isFinal*/true); // Commit stats before closing session
|
||||
mCaptureSession.close();
|
||||
}
|
||||
@@ -854,6 +862,11 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {
|
||||
mHandlerThread.quit();
|
||||
|
||||
try {
|
||||
if (!mSessionClosed) {
|
||||
// return value is omitted. nothing can do after session is closed.
|
||||
mPreviewExtender.onDisableSession();
|
||||
mImageExtender.onDisableSession();
|
||||
}
|
||||
mPreviewExtender.onDeInit();
|
||||
mImageExtender.onDeInit();
|
||||
} catch (RemoteException e) {
|
||||
|
||||
Reference in New Issue
Block a user