diff options
author | Eino-Ville Talvala <etalvala@google.com> | 2015-07-15 16:04:27 -0700 |
---|---|---|
committer | Eino-Ville Talvala <etalvala@google.com> | 2015-07-16 14:55:33 -0700 |
commit | b25e3c87724b6147ed1da7c1d6617c39bfce2fbf (patch) | |
tree | c0e95e487b2583b8ba87e2ce5505fb74dec9d2d8 /services/camera/libcameraservice/api2 | |
parent | 1bc88814f530bf67e425cfb8cea0f2b8dce3c03f (diff) | |
download | frameworks_av-b25e3c87724b6147ed1da7c1d6617c39bfce2fbf.zip frameworks_av-b25e3c87724b6147ed1da7c1d6617c39bfce2fbf.tar.gz frameworks_av-b25e3c87724b6147ed1da7c1d6617c39bfce2fbf.tar.bz2 |
Camera: Add hidden experimental tearDown method.
Bug: 18949148
Change-Id: Ie86ec7d1ec3db54e1154563b2339a208a935f849
Diffstat (limited to 'services/camera/libcameraservice/api2')
-rw-r--r-- | services/camera/libcameraservice/api2/CameraDeviceClient.cpp | 32 | ||||
-rw-r--r-- | services/camera/libcameraservice/api2/CameraDeviceClient.h | 3 |
2 files changed, 35 insertions, 0 deletions
diff --git a/services/camera/libcameraservice/api2/CameraDeviceClient.cpp b/services/camera/libcameraservice/api2/CameraDeviceClient.cpp index 3b83f63..c717a56 100644 --- a/services/camera/libcameraservice/api2/CameraDeviceClient.cpp +++ b/services/camera/libcameraservice/api2/CameraDeviceClient.cpp @@ -719,6 +719,38 @@ status_t CameraDeviceClient::prepare(int streamId) { return res; } +status_t CameraDeviceClient::tearDown(int streamId) { + ATRACE_CALL(); + ALOGV("%s", __FUNCTION__); + + status_t res = OK; + if ( (res = checkPid(__FUNCTION__) ) != OK) return res; + + Mutex::Autolock icl(mBinderSerializationLock); + + // Guard against trying to prepare non-created streams + ssize_t index = NAME_NOT_FOUND; + for (size_t i = 0; i < mStreamMap.size(); ++i) { + if (streamId == mStreamMap.valueAt(i)) { + index = i; + break; + } + } + + if (index == NAME_NOT_FOUND) { + ALOGW("%s: Camera %d: Invalid stream ID (%d) specified, no stream " + "created yet", __FUNCTION__, mCameraId, streamId); + return BAD_VALUE; + } + + // Also returns BAD_VALUE if stream ID was not valid or if the stream is in + // use + res = mDevice->tearDown(streamId); + + return res; +} + + status_t CameraDeviceClient::dump(int fd, const Vector<String16>& args) { String8 result; result.appendFormat("CameraDeviceClient[%d] (%p) dump:\n", diff --git a/services/camera/libcameraservice/api2/CameraDeviceClient.h b/services/camera/libcameraservice/api2/CameraDeviceClient.h index 0f485ca..1f8b39d 100644 --- a/services/camera/libcameraservice/api2/CameraDeviceClient.h +++ b/services/camera/libcameraservice/api2/CameraDeviceClient.h @@ -111,6 +111,9 @@ public: // Prepare stream by preallocating its buffers virtual status_t prepare(int streamId); + // Tear down stream resources by freeing its unused buffers + virtual status_t tearDown(int streamId); + /** * Interface used by CameraService */ |