diff options
author | Zhijun He <zhijunhe@google.com> | 2013-09-30 19:31:39 -0700 |
---|---|---|
committer | Zhijun He <zhijunhe@google.com> | 2013-09-30 20:59:50 -0700 |
commit | 893068ad0ca0cce8428f5a358c86b81139399c07 (patch) | |
tree | cc82f5bf690cecf792aed9fb9e8a0bbe957468c5 /services | |
parent | 9fc79c6fccc41255bb4f3538e2a21b01db8dc2dc (diff) | |
download | frameworks_av-893068ad0ca0cce8428f5a358c86b81139399c07.zip frameworks_av-893068ad0ca0cce8428f5a358c86b81139399c07.tar.gz frameworks_av-893068ad0ca0cce8428f5a358c86b81139399c07.tar.bz2 |
Camera: drop stale callback buffer
Sometimes, when preview size is changed and preview callback is enabled, stale
callback buffer from previous size could be delivered to callback processor
because stop preview doesn't guarantee consumer side buffers are properly
cleaned up. We need drop these buffers to avoid sending wrong data to app side.
Bug: 11009183
Change-Id: If9281e8c02481f883872ce58dfd8660a06d56a47
Diffstat (limited to 'services')
-rw-r--r-- | services/camera/libcameraservice/api1/client2/CallbackProcessor.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/services/camera/libcameraservice/api1/client2/CallbackProcessor.cpp b/services/camera/libcameraservice/api1/client2/CallbackProcessor.cpp index 9d8c4a1..d2ac79c 100644 --- a/services/camera/libcameraservice/api1/client2/CallbackProcessor.cpp +++ b/services/camera/libcameraservice/api1/client2/CallbackProcessor.cpp @@ -312,6 +312,16 @@ status_t CallbackProcessor::processNewCallback(sp<Camera2Client> &client) { return OK; } + if (imgBuffer.width != static_cast<uint32_t>(l.mParameters.previewWidth) || + imgBuffer.height != static_cast<uint32_t>(l.mParameters.previewHeight)) { + ALOGW("%s: The preview size has changed to %d x %d from %d x %d, this buffer is" + " no longer valid, dropping",__FUNCTION__, + l.mParameters.previewWidth, l.mParameters.previewHeight, + imgBuffer.width, imgBuffer.height); + mCallbackConsumer->unlockBuffer(imgBuffer); + return OK; + } + previewFormat = l.mParameters.previewFormat; useFlexibleYuv = l.mParameters.fastInfo.useFlexibleYuv && (previewFormat == HAL_PIXEL_FORMAT_YCrCb_420_SP || |