summaryrefslogtreecommitdiffstats
path: root/services/camera/libcameraservice/api1
diff options
context:
space:
mode:
authorZhijun He <zhijunhe@google.com>2013-09-30 19:31:39 -0700
committerZhijun He <zhijunhe@google.com>2013-09-30 20:59:50 -0700
commit893068ad0ca0cce8428f5a358c86b81139399c07 (patch)
treecc82f5bf690cecf792aed9fb9e8a0bbe957468c5 /services/camera/libcameraservice/api1
parent9fc79c6fccc41255bb4f3538e2a21b01db8dc2dc (diff)
downloadframeworks_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/camera/libcameraservice/api1')
-rw-r--r--services/camera/libcameraservice/api1/client2/CallbackProcessor.cpp10
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 ||