OSDN Git Service

Camera2: Delete all streams and stop all threads during shutdown.
authorEino-Ville Talvala <etalvala@google.com>
Thu, 6 Sep 2012 02:02:43 +0000 (19:02 -0700)
committerAndroid (Google) Code Review <android-gerrit@google.com>
Fri, 7 Sep 2012 18:20:03 +0000 (11:20 -0700)
Bug: 6243944
Change-Id: If13a1f91e8a07c1ec4f91183d1a4b261ec4f6d52

services/camera/libcameraservice/Camera2Client.cpp
services/camera/libcameraservice/camera2/CallbackProcessor.cpp
services/camera/libcameraservice/camera2/JpegProcessor.cpp
services/camera/libcameraservice/camera2/ZslProcessor.cpp

index 2c8a6a2..0c5d45c 100644 (file)
@@ -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;
index bccb18e..ca917f2 100644 (file)
@@ -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;
index 92148ca..b230d2d 100644 (file)
@@ -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;
index a39585e..ac02afc 100644 (file)
@@ -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;