summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorEino-Ville Talvala <etalvala@google.com>2012-09-05 19:02:43 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-09-07 11:20:03 -0700
commit7d8b92bf72194896363ceef97e12a52ac1bb1e5c (patch)
treea87fcaa4b25d8b6faba6167ae1b9b85b1b7b4e87 /services
parente84fbbfd162edb5874eae9e432d634b13fb7bba6 (diff)
downloadframeworks_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
Diffstat (limited to 'services')
-rw-r--r--services/camera/libcameraservice/Camera2Client.cpp7
-rw-r--r--services/camera/libcameraservice/camera2/CallbackProcessor.cpp6
-rw-r--r--services/camera/libcameraservice/camera2/JpegProcessor.cpp6
-rw-r--r--services/camera/libcameraservice/camera2/ZslProcessor.cpp5
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;