diff options
author | Eino-Ville Talvala <etalvala@google.com> | 2012-09-05 19:02:43 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-09-07 11:20:03 -0700 |
commit | 7d8b92bf72194896363ceef97e12a52ac1bb1e5c (patch) | |
tree | a87fcaa4b25d8b6faba6167ae1b9b85b1b7b4e87 | |
parent | e84fbbfd162edb5874eae9e432d634b13fb7bba6 (diff) | |
download | frameworks_av-7d8b92bf72194896363ceef97e12a52ac1bb1e5c.zip frameworks_av-7d8b92bf72194896363ceef97e12a52ac1bb1e5c.tar.gz frameworks_av-7d8b92bf72194896363ceef97e12a52ac1bb1e5c.tar.bz2 |
Camera2: Delete all streams and stop all threads during shutdown.
Bug: 6243944
Change-Id: If13a1f91e8a07c1ec4f91183d1a4b261ec4f6d52
4 files changed, 24 insertions, 0 deletions
diff --git a/services/camera/libcameraservice/Camera2Client.cpp b/services/camera/libcameraservice/Camera2Client.cpp index 2c8a6a2..0c5d45c 100644 --- a/services/camera/libcameraservice/Camera2Client.cpp +++ b/services/camera/libcameraservice/Camera2Client.cpp @@ -156,6 +156,11 @@ Camera2Client::~Camera2Client() { disconnect(); mFrameProcessor->requestExit(); + mCaptureSequencer->requestExit(); + mJpegProcessor->requestExit(); + mZslProcessor->requestExit(); + mCallbackProcessor->requestExit(); + ALOGI("Camera %d: Closed", mCameraId); } @@ -391,6 +396,8 @@ void Camera2Client::disconnect() { mCallbackProcessor->deleteStream(); + mZslProcessor->deleteStream(); + mDevice.clear(); SharedParameters::Lock l(mParameters); l.mParameters.state = Parameters::DISCONNECTED; diff --git a/services/camera/libcameraservice/camera2/CallbackProcessor.cpp b/services/camera/libcameraservice/camera2/CallbackProcessor.cpp index bccb18e..ca917f2 100644 --- a/services/camera/libcameraservice/camera2/CallbackProcessor.cpp +++ b/services/camera/libcameraservice/camera2/CallbackProcessor.cpp @@ -39,6 +39,7 @@ CallbackProcessor::CallbackProcessor(wp<Camera2Client> client): CallbackProcessor::~CallbackProcessor() { ALOGV("%s: Exit", __FUNCTION__); + deleteStream(); } void CallbackProcessor::onFrameAvailable() { @@ -126,6 +127,11 @@ status_t CallbackProcessor::deleteStream() { sp<Camera2Device> device = client->getCameraDevice(); device->deleteStream(mCallbackStreamId); + + mCallbackHeap.clear(); + mCallbackWindow.clear(); + mCallbackConsumer.clear(); + mCallbackStreamId = NO_STREAM; } return OK; diff --git a/services/camera/libcameraservice/camera2/JpegProcessor.cpp b/services/camera/libcameraservice/camera2/JpegProcessor.cpp index 92148ca..b230d2d 100644 --- a/services/camera/libcameraservice/camera2/JpegProcessor.cpp +++ b/services/camera/libcameraservice/camera2/JpegProcessor.cpp @@ -42,6 +42,7 @@ JpegProcessor::JpegProcessor( JpegProcessor::~JpegProcessor() { ALOGV("%s: Exit", __FUNCTION__); + deleteStream(); } void JpegProcessor::onFrameAvailable() { @@ -142,6 +143,11 @@ status_t JpegProcessor::deleteStream() { sp<Camera2Device> device = client->getCameraDevice(); device->deleteStream(mCaptureStreamId); + + mCaptureHeap.clear(); + mCaptureWindow.clear(); + mCaptureConsumer.clear(); + mCaptureStreamId = NO_STREAM; } return OK; diff --git a/services/camera/libcameraservice/camera2/ZslProcessor.cpp b/services/camera/libcameraservice/camera2/ZslProcessor.cpp index a39585e..ac02afc 100644 --- a/services/camera/libcameraservice/camera2/ZslProcessor.cpp +++ b/services/camera/libcameraservice/camera2/ZslProcessor.cpp @@ -58,6 +58,7 @@ ZslProcessor::ZslProcessor( ZslProcessor::~ZslProcessor() { ALOGV("%s: Exit", __FUNCTION__); + deleteStream(); } void ZslProcessor::onFrameAvailable() { @@ -191,6 +192,10 @@ status_t ZslProcessor::deleteStream() { device->deleteStream(mZslReprocessStreamId); mZslReprocessStreamId = NO_STREAM; device->deleteStream(mZslStreamId); + + mZslWindow.clear(); + mZslConsumer.clear(); + mZslStreamId = NO_STREAM; } return OK; |